如何在Python中向Postgres的bytea数组字段追加图片字节数据
问题解决方案
核心错误原因
- 语法逻辑错误:没有使用
UPDATE语句修改数据,当前写的SELECT是查询语句,也没有指定操作的表为account - 二进制参数拼接错误:直接用f-string将Python的bytes对象拼接入SQL,会将
b'xxx'的字面格式直接带入SQL,不符合PostgreSQL对bytea类型的语法要求,直接触发语法错误 - 未使用参数化查询,除了报错外还存在SQL注入安全隐患
正确实现代码
import os import psycopg2 # 假设mydb是你已经初始化完成的数据库连接对象 my_cursor = mydb.cursor() with open(os.path.join('image', 'Image.png'), 'rb') as file: image = file.read() # 使用参数化查询,不要自行拼接SQL内容 update_sql = "UPDATE account SET images = array_append(images, %s) WHERE id = 7" # 把二进制参数放到execute的第二个参数元组中,psycopg2会自动处理类型转换 my_cursor.execute(update_sql, (image,)) mydb.commit() my_cursor.close()
补充说明
- psycopg2会自动将Python的bytes对象转换为PostgreSQL兼容的bytea格式,不需要手动转义
- 如果
images字段初始值为NULL,array_append会返回NULL,建议给images字段设置默认值为空数组'{}'::bytea[],也可以修改SQL兼容NULL场景:
对应execute传参改为UPDATE account SET images = COALESCE(array_append(images, %s), ARRAY[%s]::bytea[]) WHERE id =7(image, image)即可
内容的提问来源于stack exchange,提问作者Salman_al_03
相关产品推荐
相关产品推荐

