0

当我使用psycopg2向PostgreSQL插入数据时,我无法插入包含 '\x00' 的字符串。

这是我的代码:

>>> import psycopg2
>>> import psycopg2.extensions
>>> conn = psycopg2.connect(database='test')
>>> curs = conn.cursor()
>>> print curs.mogrify('insert into test values (%s, %s)', 
        ('hello, buddy', 'str\x00str'))
>>> curs.close()
>>> conn.close()

我可以得到这样的字符串:

>>> ...
>>> print curs.mogrify('insert into test values (%s, %s)', 
...    ('hello, world', 'str\x00str'))
insert into test values ('hello, world', 'str')
>>> ... 

那么,“\x00str”在哪里?

但是,在psycopg2中,我发现了一些关于 unicoding-handling 的信息。

它显示 ['\x01' - '\xff] 有效。

代码如:

>>> ...
>>> print curs.mogrify('insert into test values (%s, %s)', 
...    ('hello, world', 'str\x01\x02\x03...\xffstr'))
insert into test values ('hello, world', 'str\x01\x02\x03...\xffstr')
>>> ...

[问题]:'\x00str'在哪里?如何使字符串 '\x00' 在 psycopg2 中工作?

4

1 回答 1

1

问题是您试图在字符串中间插入一个值为 0 的字符,而 PostgreSQL 不支持字符数据(libpq 返回字符串 \0-终止,我们无法区分您的 \0 与真实的)。如果要插入任意数据(包括 0),请使用 bytea 列和 psycopg2 二进制适配器。

http://www.psycopg.org/psycopg/docs/module.html#psycopg2.Binary

于 2012-07-19T08:10:18.370 回答