You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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场景:
    UPDATE account SET images = COALESCE(array_append(images, %s), ARRAY[%s]::bytea[]) WHERE id =7
    
    对应execute传参改为(image, image)即可

内容的提问来源于stack exchange,提问作者Salman_al_03

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:18:00