如何使用Python将字节串存入SQLite数据库?
Python 字节串存入SQLite数据库的正确方法
你之前的错误核心是直接用f-string把字节串/bytearray拼进SQL语句,字节串的默认字符串表示(比如b'\x89PNG...')不符合SQL的语法规范,自然会触发sqlite3.OperationalError,而且这种写法还存在SQL注入风险。
正确的做法是用参数化查询,让sqlite3模块自动处理Blob类型的参数,无需手动格式转换。
完整实现步骤
- 先确保数据库表已正确创建(明确Blob字段类型)
- 以二进制模式读取文件内容
- 使用参数化的
execute语句插入数据
示例代码
import sqlite3 # 1. 创建表(首次运行执行,之后可注释) with sqlite3.connect("database.db") as con: cur = con.cursor() # 定义表结构:id(主键), image(Blob), location(文本), city(文本) cur.execute(""" CREATE TABLE IF NOT EXISTS images ( id INTEGER PRIMARY KEY, image BLOB, location TEXT, city TEXT ) """) con.commit() # 2. 读取图片字节内容 with open("image.png", "rb") as file: image_bytes = file.read() # 3. 参数化插入数据 with sqlite3.connect("database.db") as con: cur = con.cursor() # 用?作为占位符,把参数放在execute的第二个参数里 cur.execute( "INSERT INTO images VALUES (?, ?, ?, ?)", (1, image_bytes, "Park", "New-York") ) con.commit()
读取Blob数据的方法
如果之后要从数据库里取出图片,同样用参数化查询:
with sqlite3.connect("database.db") as con: cur = con.cursor() cur.execute("SELECT image FROM images WHERE id = ?", (1,)) result = cur.fetchone() if result: # 把取出的字节串写入文件 with open("retrieved_image.png", "wb") as file: file.write(result[0])
为什么之前的方法不行?
- 用f-string拼接字节串时,Python会把字节串转成类似
b'\x89PNG\r\n\x1a\n...'的字符串,这在SQL语句里是完全无效的语法,数据库无法识别为Blob类型。 - 直接拼接变量还会带来SQL注入风险,参数化查询是Python操作数据库的标准安全做法。
内容的提问来源于stack exchange,提问作者Foxym
相关产品推荐
相关产品推荐

