当我使用 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中工作?
答案 0 :(得分:1)
问题是你试图在字符串中间插入一个值为0的字符,而PostgreSQL不支持字符数据(libpq返回字符串\ 0-terminated,我们无法区分你的\ 0来自真实的)。如果要插入任意数据(包括0),请使用bytea列和psycopg2二进制适配器。
请参阅http://www.psycopg.org/psycopg/docs/module.html#psycopg2.Binary