我有一个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
,并且不允许格式化。如何解决这个问题?你知道吗
不是一个真正的解决方案,而是一个足够好的解决方法。我决定使用
psycopg2
而不是PyGreSQL
,因为它更受支持,更常见,所以更容易找到任何常见问题的信息。在那里,解决方案是对每种类型使用
%s
,我发现这更像python(不需要考虑动态类型语言中的类型)所以,我的查询如下:
相关问题 更多 >
编程相关推荐