更新mysql数据库的blob类型字段内容

1.首先对于blob类型做一个说明:

对于mysql或者mariadb有4个可选的blob类型:

tinyblob:最大存储数据的长度为255字节

blob:最大存储的数据长度为65535字节,也就是65Kb

mediumblob:最大存储的数据长度为16777215字节,也就是16Mb

longblob:最大存储的数据长度为4,294,967,295(232 - 1)字节,也就是4Gb

2. blob类型的用途

通常这种类型的字段用于存储二进制文件,例如 图片、视频、音频、文档等

3. 向数据库的blob字段中插入数据,并查询

# -*- coding:utf-8 -*-
import mariadb
# 连接数据库
conn = mariadb.connect(
  user="mysql",  # 数据库账号
  password="passwd",  #数据库密码
  host="192.168.1.101",  # 数据库主机名或IP地址
  database = "employee",   #指定数据库(可选)
  port=3306, #端口
  autocommit = True  # DB更新操作是否自动commit(可选参数)
  )
# 打开图片文件
with open('C:\\Users\\xiaoming\\Desktop\\100001.jpg', 'rb') as file:
    fp = file.read()
# 定义sql的插入语句
sql_insert = '''INSERT INTO staff (uid, name, photo) values(?,?,?)'''
values = [('100001','小明',fp)]
# 打开数据库游标
cur = conn.cursor()
# 执行sql语句,进行插入数据
cur.executemany(sql_insert,values) #执行SQL语句

# 定义数据库查询语句
sql_select = '''select photo from staff where uid=\'100001\';'''
# 执行sql语句
cur.execute(sql_select)
# 读取查询数据
photo_data = cur.fetchall()
print(type(photo_data))
#关闭数据库连接
conn.close()

插入数据后,还可以使用数据库客户端工具进行查看,比如DBeaver

  4. 更新数据库中的blob类型的字段内容

对于update操作,是比较特殊的,如果直接通过类似 UPDATE  staff   SET  photo=b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x....   WHERE  uid='100001';的更新语句,会报语法错误。

对于更新操作,可以采用如下的方式:

# -*- coding:utf-8 -*-
import mariadb
# 连接数据库
conn = mariadb.connect(
  user="mysql",  # 数据库账号
  password="passwd",  #数据库密码
  host="192.168.1.101",  # 数据库主机名或IP地址
  database = "employee",   #指定数据库(可选)
  port=3306, #端口
  autocommit = True  # DB更新操作是否自动commit(可选参数)
  )
# 打开图片文件
with open('C:\\Users\\xiaoming\\Desktop\\100001_1.jpg', 'rb') as file:
    fp = file.read()
# 定义sql的插入语句
sql_update = '''update staff set photo=%s where uid=\'100001\';'''
args = (fp)
# 打开数据库游标
cur = conn.cursor()
# 执行sql语句,进行插入数据
cur.execute(sql_update,args) #执行SQL语句
#关闭数据库连接
conn.close()

 

posted @ 2021-12-09 20:33  荒野游侠  阅读(3433)  评论(0编辑  收藏  举报