如何将bytestring传递给PyGreSQL?

2024-04-28 23:40:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个PostgreSQL表,其列类型为bytea。从SQLite移植该表时,我遇到了一个问题—我不知道如何将原始二进制数据传递给SQL查询。我使用的框架是PyGreSQL。我想坚持使用DB-API 2.0接口,以避免大量转换。
与经典接口(美元符号参数)和SQLite(问号参数)不同,该接口需要指定类型(%-格式与旧的Python相同)。
我要传递的数据是一个PNG文件,使用open()方法中的'rb'标志进行二进制读取。
查询代码如下所示:

db = pgdb.connect(args)
c = db.cursor()
c.execute('INSERT INTO tbl VALUES (%b)', (b'test_bytes',))

这会产生错误unsupported format character 'b' (0x62) at index 54,并且不允许格式化。如何解决这个问题?你知道吗


Tags: 数据框架api类型dbsqlitesql参数
1条回答
网友
1楼 · 发布于 2024-04-28 23:40:05

不是一个真正的解决方案,而是一个足够好的解决方法。我决定使用psycopg2而不是PyGreSQL,因为它更受支持,更常见,所以更容易找到任何常见问题的信息。
在那里,解决方案是对每种类型使用%s,我发现这更像python(不需要考虑动态类型语言中的类型)

所以,我的查询如下:

c.execute('INSERT INTO tbl VALUES (%s)', (b'test_bytes',))

相关问题 更多 >