为什么psycopg2不能插入'\ x00'之类的字符串?

时间:2012-07-04 04:56:22

标签: python psycopg2

当我使用 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中工作?

1 个答案:

答案 0 :(得分:1)

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

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