本文使用到的pymysql为1.0.2版本
在IDEA中配置Python参考本人写的另一篇文章
第一步:安装PyMySQL
PyMySQL用于 python连接到MySQL数据库服务器,在IDEA中安装PyMySQL如下图所示。
在终端中输入命令:pip3 install PyMySQL
第二步:连接数据库
1.打开数据库连接,使用方法pymysql.connect()
2.使用cursor()方法创建游标对象
3.使用游标对象 . execute()方法执行SQL语句
4.关闭数据库连接 ,关闭游标
以下代码修改connect中的内容即可直接运行
import pymysql
db = pymysql.connect(host='',#数据库所在地IP地址,本机默认localhost即可
user='',#数据库的用户名
password='',#用户密码
database='')#数据库的名称,不是数据库中表的名称
cursor = db.cursor()#创建一个游标对象
cursor.execute("SELECT VERSION()")# 执行 SQL 语句,查询数据库版本,返回一条数据
data = cursor.fetchone()# 使用 fetchone() 方法获取上面查询后返回的单条数据.
print ("Database version : %s " % data)
db.close()# 关闭数据库连接
cursor.close()#关闭游标对象
第三步:向数据库中存入图片
1.打开图片,读取图片数据
2.使用游标对象 . execute()方法执行SQL语句插入图片数据
打开图片时,如果使用open('lucy.jpg')方式打开,而不在参数中添加'rb',则在执行SQL语句时,要将图片的数据使用escape_string方法进行转义,在pymysql1.0版本以上时,语句为:pymysql.converters.escape_string()
不推荐使用这种转义的方法,这种方法还需要在open函数中添加另一个参数encoding='ISO-8859-1',否则图片数据写入数据库时,会报错gbk格式或是其他格式无法解释图片数据。即使是添加了这个encoding参数,写入的数据也无法直接读取出来,读取出来会显示图片格式错误或格式不支持
import pymysql
db = pymysql.connect(host='',
user='',
password='',
database='')
#打开我目录下名为'lucy.jpg'图片
with open('lucy.jpg', 'rb') as f:
img = f.read()
cursor = db.cursor()#创建一个游标对象
#使用游标对象执行插入图片数据的sql语句
sql="INSERT INTO Images (Data) VALUES (%s)"
cursor.execute(sql ,img)
db.commit()#提交插入请求
db.close()# 关闭数据库连接
cursor.close()#关闭游标对象
第四步:从数据库中读取图片
1. execute()方法执行SQL语句读回图片数据
2. 使用fetchone()方法将图片数据写入一个文件
fetchone()也是游标对象的一个方法,该方法获取单条数据,获取下一个查询结果集,返回元组,cursor.fetchone()[0]即为提取第一个元素
import pymysql
db = pymysql.connect(host='',
user='',
password='',
database='')
#打开我目录下名为'lucy.jpg'图片
with open('lucy.jpg', 'rb') as f:
img = f.read()
cursor = db.cursor()#创建一个游标对象
cursor.execute("SELECT Data FROM Images LIMIT 1")#提取数据库第一行数据
res = cursor.fetchone()[0]
with open('lc2.jpg', 'wb') as f:
f.write(res)
db.close()# 关闭数据库连接
cursor.close()#关闭游标对象
附:读写图片代码及效果
import pymysql
db = pymysql.connect(host='',
user='',
password='',
database='',)
with open('lucy.jpg', 'rb') as f:
img = f.read()
cursor = db.cursor()
sql="INSERT INTO Images (Data) VALUES (%s)"
cursor.execute(sql ,img)
db.commit()
cursor.execute("SELECT Data FROM Images LIMIT 1")
res = cursor.fetchone()[0]
with open('lc2.jpg', 'wb') as f:
f.write(res)
# 关闭数据库连接和游标连接
cursor.close()
db.close()