本文主要讲解使用pymysql连接mariadb数据库的操作
参考文档:
pymysql官方文档
一、基础
安装
pip install PyMySQL
导入
import pymysql
二、对象
1、连接对象
创建方法:
conn=pymysql.connect(host='XXXX',user='root',password='XXX',database='XXX',charset='utf8')
基本参数:
- host:MySQL的主机IP地址,本机可使用 ‘localhost’ / 127.0.0.1
- user:登入用户名,MySQL 初始只有 ‘root’ 管理员用户
- password:登入密码
- database:连接的数据库名
- port:端口号,默认 3306
还有很多可选参数,具体可查看官方文档
方法:
- commit()
涉及写操作要注意提交 - close()
关闭数据库连接 - cursor()
创建游标对象
2、游标对象
执行完毕返回的结果集默认以元组显示
cursor=conn.cursor() #
如需返回结果为字典,则需修改cursor参数
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
方法:
- 执行命令
- execute(query, args=None)
执行一条命令 - executemany(query, args)
执行多条命令,返回 Number of rows affected
- execute(query, args=None)
- 抓取执行结果
- fetchone()
获取一行 - fetchmany(size=None)
获取size行 - fetchall()
获取所有行
- fetchone()
- 关闭游标
- close()
释放cursor对象
- close()
三、代码演示
1、SQL语句
单条数据:
#注意%s需要加引号
sql='select * from user where username="%s" and password="%s";' %(user,pwd)
#执行单条语句用executemany
cursor.execute(sql)
多条数据:
data = [(user1,pwd1),(user2,pwd2),(user3,pwd3),]
#%s需要去掉引号,pymysql会自动加上
sql = 'insert into users (username,password) values (%s,%s);'
#执行多条语句用executemany
cursor.executemany(sql,data)
2、fetch方法
import pymysql
#建立与数据库的连接
conn=pymysql.connect(host='localhost',user='root',password='',database='db2')
#创建游标
cursor=conn.cursor()
#执行sql语句
sql='select * from user;'
rows=cursor.execute(sql) #返回的是表中所有记录的条数
cursor.scroll(3,mode='absolute') # 相对绝对位置移动,第一个参数是相对绝对位置移动的记录条个数
# cursor.scroll(1,mode='relative') # 相对当前位置移动,第一个参数是相对当前位置移动的记录条个数
#通过fetchone、fetchmany、fetchall拿到查询结果
res1=cursor.fetchone() #以元组的形式,返回查询记录的结果,默认是从第一条记录开始查询
# res2=cursor.fetchone() #会接着上一次的查询记录结果继续往下查询
# res3=cursor.fetchone()
# res4=cursor.fetchmany(2) #查询两条记录会以元组套小元组的形式进行展示
# res5=cursor.fetchall()
#打印查询的最终结果到终端
print(res1)
# print(res2)
# print(res3)
# print(res4)
# print(res5) #会元组套小元组的形式将表中的左右记录头查询出来展示在终端
print('%s行数据'%rows)
3、增删改查
import pymysql
# 链接
conn = pymysql.connect(host='XXX', user='root', password='XXX', database='XXX', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 查
sql = 'select * from users where username=%s and password=%s;'
data = ['user1', 'pwd1']
num = cursor.execute(sql, data)
res = cursor.fetchall()
print(res)
# 增
sql = 'insert into users values(%s,%s);'
data = [('user2', 'pwd2'), ('user3', 'pwd3')]
rows_num = cursor.executemany(sql, data)
print(rows_num)
# 改
sql = 'update users set password = %s where username = %s and password = %s;'
data = [('pwd44', 'user4', 'pwd4'), ('pwd55', 'user5', 'pwd5')]
rows_num = cursor.executemany(sql, data)
print(rows_num)
# 删除
sql = 'delete from users where username = %s and password = %s;'
data = [('user2', 'pwd2'), ('user3', 'pwd3')]
rows_num = cursor.executemany(sql, data)
print(rows_num)
#提交数据
conn.commit()
# 查询最终结果
sql = 'select * from users;'
num = cursor.execute(sql)
res = cursor.fetchall()
print(res)
#关闭连接
cursor.close()
conn.close()
四、简易接口
待补充