一、pymysql简介

对于Python操作MySQL主要使用两种方式:

  • 原生模块 pymsql
  • ORM框架 SQLAchemy

pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。

二、简单使用

# -*- coding:utf-8 -*-
# author: cdc
# date: 2019/3/18 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor()
#执行sql操作
r = cursor.execute("insert into student(age,sex,class_no) values(16,'male',2)")
# r为执行sql语句后受影响的行数
print(r)
# 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()

三、增删改查

 # -*- coding:utf-8 -*-
# author: cdc
# date: 2019/3/18 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor() # 增加一行数据
cursor.execute("insert into tb1(name,part) values('cdc',1)") # 字符串拼接sql(禁止使用,会引起sql注入)
inp_1 = ('cdcy',2,)
sql = "insert into tb1(name,part) values('%s','%s')" % inp_1
cursor.execute(sql) # 带参数插入数据(推荐使用)
inp_2 = ('cdcx',2)
cursor.execute("insert into tb1(name,part) values(%s,%s)",inp_2) # 增加多行数据
lis = [('cdc1',2),
('cdc2',2),
('cdc3',2),
]
cursor.executemany("insert into tb1(name,part) values(%s,%s)",lis) # 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()

插入数据

 # -*- coding:utf-8 -*-
# author: cdc
# date: 2019/3/18 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor()
#执行sql操作
r = cursor.execute("delete from tb1 where name=%s",('alex',))
# r为执行sql语句后受影响的行数
print(r)
# 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()

 # -*- coding:utf-8 -*-
# author: cdc
# date: 2019/3/18 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor()
#执行sql操作
r = cursor.execute("update tb1 set name=%s where part=%s",('ccc',1,))
# r为执行sql语句后受影响的行数
print(r)
# 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()

查新操作时,不需要执行commit操作

 # -*- coding:utf-8 -*-
# author: cdc
# date: 2019/3/18 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor()
# 查询数据
cursor.execute('select * from tb3') # 展示一行
result = cursor.fetchone()
print(result)
result = cursor.fetchone()
print(result) # 展示多行
result = cursor.fetchmany(3)
print(result) # 展示全部
result = cursor.fetchall()
print(result)

pymysql查询操作

注意:fetch操作的机制类似于文件操作中的指针,会在上一次的展示基础位置上继续往下展示n行数据

 # -*- coding:utf-8 -*-
# author: cdc
# date: 2019/3/18 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor()
# 查询数据
cursor.execute('select * from tb3') # 展示一行
result = cursor.fetchone()
print(result)
result = cursor.fetchone()
print(result) # 展示多行
result = cursor.fetchmany(3)
print(result) # ******************** 执行结果 ***************
"""
(1, 'cdc', 1)
(2, 'ccc', 1)
((3, 'ctt', 3), (4, 'lj', 4), (5, 'xx', 5))
"""

fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:

  • cursor.scroll(n,mode='relative')  # 相对当前位置移动,即从当前位置向前或者向后移动n个位置,再进行数据展示
  • cursor.scroll(n,mode='absolute') # 相对绝对位置移动,即从当前位置回到n位置后,再进行数据的展示
 # -*- coding:utf-8 -*-
# author: cdc
# date: 2019/3/18 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor()
# 查询数据
cursor.execute('select * from tb3') # 展示一行
result = cursor.fetchone()
print(result)
result = cursor.fetchone()
print(result) # 向前移动一个位置
"""
(1, 'cdc', 1)
(2, 'ccc', 1)
(2, 'ccc', 1)
"""
cursor.scroll(-1,mode='relative') # 向后移动一个位置
"""
(1, 'cdc', 1)
(2, 'ccc', 1)
(4, 'lj', 4) """
cursor.scroll(1,mode='relative')
result = cursor.fetchone()
print(result)

此外,fetch操作默认获取的数据是元祖类型,如果想要或者字典类型的数据,可以通过改变游标的方式实现:

 # -*- coding:utf-8 -*-
# author: cdc
# date: 2019/3/18 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 查询数据
cursor.execute('select * from tb3') # 展示全部
result = cursor.fetchall()
print(result) # ********* 执行结果 ************
"""
[{'part_no': 1, 'name': 'cdc', 'no': 1}, {'part_no': 1, 'name': 'ccc', 'no': 2}, {'part_no': 3, 'name': 'ctt', 'no': 3}, {'part_no': 4, 'name': 'lj', 'no': 4}, {'part_no': 5, 'name': 'xx', 'no': 5}, {'part_no': 9, 'name': 'cc', 'no': 6}, {'part_no': 5, 'name': 'fdc', 'no': 7}]
"""

 其他操作

 # 注:必须得有自增列

 import pymysql

 # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor()
# 查询数据
cursor.execute('insert into class(address) values(%s)',('class_3',)) new_id = cursor.lastrowid
print(new_id)

获取最新自增ID

Python学习—数据库篇之pymysql的更多相关文章

  1. Python学习—数据库篇之SQL补充

    一.SQL注入问题 在使用pymysql进行信息查询时,推荐使用传参的方式,禁止使用字符串拼接方式,因为字符串拼接往往会带来sql注入的问题 # -*- coding:utf-8 -*- # auth ...

  2. Python学习—数据库篇之索引

    一.索引简介 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可,对于索引,会保存在额外的文件中.在mys ...

  3. Python学习—数据库篇之练习题

    Mysql测试题 一.表关系 请创建如下表,并创建相关约束 二.操作表 0.在成绩表中同时显示出对应的课程名和学生名 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: ...

  4. Python学习—数据库篇之SQL语句

    一.数据库级别 1.显示数据库 show databases; 默认数据库: mysql - 用户权限相关数据 test - 用于用户测试数据 information_schema - MySQL本身 ...

  5. Python学习—数据库篇之初识mysql

    一.下载与安装 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好 ...

  6. Python学习第一篇

    好久没有来博客园了,今天开始写自己学习Python和Hadoop的学习笔记吧.今天写第一篇,Python学习,其他的环境部署都不说了,可以参考其他的博客. 今天根据MachineLearning里面的 ...

  7. [Python学习]错误篇二:切换当前工作目录时出错——FileNotFoundError: [WinError 3] 系统找不到指定的路径

    REFERENCE:<Head First Python> ID:我的第二篇[Python学习] BIRTHDAY:2019.7.13 EXPERIENCE_SHARING:解决切换当前工 ...

  8. [Python学习]错误篇一

    REFERENCE:<Head First Python> ID:我的第一篇[Python学习] BIRTHDAY:2019.7.6 EXPERIENCE_SHARING:两个程序错误类型 ...

  9. python学习 —— python3简单使用pymysql包操作数据库

    python3只支持pymysql(cpython >= 2.6 or >= 3.3,mysql >= 4.1),python2支持mysqldb. 两个例子: import pym ...

随机推荐

  1. tp框架增删改

    选择一张表: 首先要创建模型: 1 $n = M("account"); 数据库添加数据: 1.使用数组: 1 2 3 1.使用数组 $arr = array("uid& ...

  2. Javascrip错误类型

    Javascrip一旦发现错误,会自动创建一个Error类型对象. Javascrip中有几种错误类型?六种1.SyntaxError 语法错误2.ReferenceError 引用错误3.TypeE ...

  3. crf++实现中文分词简单例子 (Windows crf++0.58 python3)

    学习自然语言处理的同学都知道,条件随机场(crf)是个好东西.虽然它的原理确实理解起来有点困难,但是对于我们今天用到的这个crf工具crf++,用起来却是挺简单方便的. 今天只是简单试个水,参考别人的 ...

  4. LeetCode【101. 对称二叉树】

    对称二叉树,就是左节点的左节点等于右节点的右节点,左节点的右节点等于右节点的左节点. 很自然就想到迭代与递归,可以创建一个新的函数,就是另一个函数不断的判断,返回在主函数. class Solutio ...

  5. 一个小白用 PhotoView 引起的学习记录

    缘由(可跳过) 作为一个开发小白,有着各种各样想实现的功能, 最近想实现一个图片查看的功能(有放大,缩小等功能),发现了 PhotoView 这个开源框架, 用了它,腰不疼,腿不酸了 ... 添加依赖 ...

  6. 01_新建WebApi后端服务项目

    1.打开微软官网: https://www.asp.net/learn 2.查看文章: https://docs.microsoft.com/en-us/aspnet/web-api/overview ...

  7. 判断IOS、Android访问

    /*判断手机访问是Android还是IOS*/ $user_agent = $_SERVER['HTTP_USER_AGENT']; if(stripos($user_agent, "iPh ...

  8. Git 切换本地分支 切换远程分支

    切换本地分支 git checkout work1 切换到新的分支工作(不存在则会创建) 将本地已有的分支(已经存在) 和 远程分支连接 git branch --set-upstream-to=or ...

  9. Django之Form验证

    view.py 配置 from django import forms from django.forms import fields # Create your views here. class ...

  10. MTK6261 11C之Init Analysis【手记】

    初始化流程 Application_Initialize systemInitialization(); HWDInitialization(); USC_Start(); OSTD_Init(); ...