本文主要介绍如何使用Python的pymysql模块操作数据库,包括数据库的增删改查;但是mysql语句等mysql基础内容则不在本节讲解范围
如果没有mysql基础的朋友可以先到"学习栏目"的"Mysql"栏目学习mysql语句基础之后再看本节内容:
首先在命令行通过 pip 安装 pymysql
pip install pymysql
然后就可以正式使用pymysql模块操作数据库,以下是操作步骤
import pymysql
# 1.连接数据库
conn = pymysql.connect(host="127.0.0.1",user="root",password="xxxx",database="xxxx",charset="utf8)
#或者可以使用字典形式传参更方便
db_conf = {
"host":"127.0.0.1",
"user":"root",
"password":"573234044",
"database":"test",
"charset":"utf8",
#这里要说一下,下面这句意思是查到的数据要以字典形式返回,即关联数组;否则默认返回索引数组,是元组里面包着元组
"cursorclass":pymysql.cursors.DictCursor
}
conn = pymysql.connect(**db_conf)
# 2.创建光标对象
cursor=conn.cursor()
#如果在db_conf中没有定义 "cursorclass":pymysql.cursors.DictCursor 那么就要这样
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
#数据库的增删改查都要通过光标cursor来操作的
#3.执行sql语句
#增
sql="insert into books values (%s,%s)" # 这里写成这样其实相当于占位符,防止sql注入攻击
cursor.execute(sql,[None,"书籍1"]) #执行
#批量增
sql="insert into books values (%s,%s)"
# 参数格式是列表里面放着元组
data=[
(None,"b1"),
(None,"b2"),
(None,"b3")
]
cursor.executemany(sql,data)
#获取最后的id,下面两种都行
lastid=cursor.lastrowid
lastid=db.insert_id()
#这里有个bug,如果插入一条数据那么lastid是正确的,但是如果插入多条,比如我上面插入3条,lastid应该是3,但他返回的lastid是1。这里要注意。
# PS execute方法无论增删改查返回的都是影响条数
# 删
sql="delete from books where id in (%s,%s)"
res=cursor.execute(sql,[1,3])
# 改同上 略
#查询
sql = "select * from books"
# 执行
res=cursor.execute(sql) #res返回查到的条数
#获取结果集
data = cursor.fetchall() #返回列表包着字典
for d in data:
print(d['id'],d['name'])
# 查单条和多条
sql = "select * from books"
#执行
res=cursor.execute(sql)
#获取一条
data1 = cursor.fetchone() #返回字典
#获取3条
data2 = cursor.fetchmany(3) #返回列表包着字典
#但是这里要注意,假如他res有25条,fetchone拿到了id为1的数据,data2拿到了id为2,3,4的数据,把1给跳过了。这是因为获取数据时光标会移动。
#如果想将光标移动回这25条的数据集的开头可以这样
cursor.scroll(0,"absolute") 表示光标移动到所查询到的数据集的开头
cursor.scroll(-1,"relative") 光标往前移动1个
cursor.scroll(1,"relative") 光标往后移动1个
#默认是relative
# 4.最后一步
#关闭光标和连接符
cursor.close()
conn.close()