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 を区別する方法がありません)。本物)。任意のデータ (0 を含む) を挿入する場合は、bytea 列と psycopg2 Binary アダプターを使用します。

http://www.psycopg.org/psycopg/docs/module.html#psycopg2.Binaryを参照してください。

于 2012-07-19T08:10:18.370 に答える