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()