pymysql模块可以在python种链接MySql数据库,并实现对数据的操作。
安装:
使用国内源
pip3 install pymysql -i https://pypi.douban.com/simple
连接数据库:
member表如下:
连接数据库:
import pymysql
conn=pymysql.connect( host="地址",port=3306,user="用户名",password="密码",charset='utf8',)#连接数据库
数据库查询:
fetchall():获取所有行数据源
cursor=conn.cursor()#初始化游标
cursor.execute("SELECT * FROM member")#执行SQL语句
info=cursor.fetchall()
print(info)
cursor.close()#游标对象关闭
conn.close()#关闭连接
运行结果:
元组数据类型
(1, 'admin', '13800138000'),
(2, 'admin', '13800138001'),
(3, 'admin', '13800138002'),
(4, 'admin', '13800138003'),
(5, 'admin', '13800138004')
fetchone():获取首行数据
import pymysql
conn=pymysql.connect( host="地址",port=3306,user="用户名",password="密码",charset='utf8',)#连接数据库
cursor=conn.cursor()#初始化游标
cursor.execute("SELECT * FROM member")#执行SQL语句
info=cursor.fetchone()#获取首行数据
info2=cursor.fetchone()#游标位置发生了变化,所以会获取第二行数据
print(info)
print(info)
cursor.close()#游标对象关闭
conn.close()#关闭连接
运行结果:
(1, 'admin', '13800138000'),
(2, 'admin', '13800138001')
如果fetchone跟在fetchall后面同时使用时,这里需要注意游标位置,否则会出现以下问题:
import pymysql
conn=pymysql.connect( host="地址",port=3306,user="用户名",password="密码",charset='utf8',)#连接数据库
cursor=conn.cursor()#初始化游标
cursor.execute("SELECT * FROM member")#执行SQL语句
all_info=cour.fetchall()#获取全部查询数据
info=cursor.fetchone()#获取一行数据
print(all_info)
print(info)
cursor.close()#游标对象关闭
conn.close()#关闭连接
运行结果:
(1, 'admin', '13800138000'),
(2, 'admin', '13800138001'),
(3, 'admin', '13800138002'),
(4, 'admin', '13800138003'),
(5, 'admin', '13800138004')
None
fetchone会获取不到数据,游标位置类似于文件的指针位置,fetchall获取全部数据后,游标位置在数据的最后,所以会获取不到数据。
获取到的是元组数据类型,如果数据较多,没有标题的情况下会不知道每列都代表什么数据,这时候可以用以下方法:作为字典为返回结果
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)#初始化游标时,将属性cursor设置为pymysql.cursors.DictCursor
————————————————————————————————————————————————————————————————————————————
也可以在创建连接时将cursorclass设置成pymysql.cursors.DictCursor
connect=pymysql.connect( host="120.78.128.25",
port=3306,
user="future",
password="123456",
charset='utf8',
cursorclass=pymysql.cursors.DictCursor)#将cursorclass设置成pymysql.cursors.DictCursor
在来看下运行结果:
import pymysql
conn=pymysql.connect( host="地址",port=3306,user="用户名",password="密码",charset='utf8',)#连接数据库
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)#初始化游标
cursor.execute("SELECT * FROM member")#执行SQL语句
info=cursor.fetchone()
print(info)
cursor.close()#游标对象关闭
conn.close()#关闭连接
运行结果:
{'id': 1, 'username': 'admin', 'mobile': '13800138000'}
数据的增,删,改:
需要用commit()方法提交,否则不会生效。也可以在初始化连接的时候把autocommit设置为True,默认是False。
import pymysql
conn=pymysql.connect( host="地址",port=3306,user="用户名",password="密码",charset='utf8')#连接数据库
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)#初始化游标
cursor.execute("INSERT INTO member(username,mobile) VALUES('admin','13800138005')")#执行SQL语句
conn.commit()#提交事务
cursor.close()#游标对象关闭
conn.close()#关闭连接
上下文管理器:
python对文件操作时经常用到with,数据库操作也可以使用,提高代码的可读性,如下:
import pymysql
conn=pymysql.connect( host="地址",port=3306,user="用户名",password="密码",charset='utf8')#连接数据库
with conn.cursor(cursor=pymysql.cursors.DictCursor) as cursor:#初始化游标
cursor.execute("SELECT * FROM member")#执行SQL语句
print(cursor.fetchall())#获取数据
cursor.close()#游标对象关闭
conn.close()#关闭连接