4

今日、プロジェクトの 1 つでこのバグに 3 回遭遇しました。問題と解決策を後で参照できるようにオンラインにします。

impost psycopg2

con = connect(...)

def save(long_blob):
     cur = con.cursor() 
     long_data = struct.unpack('<L', long_blob)
     cur.execute('insert into blob_records( blob_data ) values (%s)', [long_data])

これは、psycopg2 からの「適応できません」というエラーで失敗します。

4

2 に答える 2

4

問題は、展開する値が 1 つしかない場合でも、struct.unpack がタプルの結果を返すことです。アイテムが 1 つしかない場合でも、タプルから最初のアイテムを確実に取得する必要があります。そうしないと、psycopg2 の sql 引数の解析が失敗し、タプルを文字列に変換しようとして失敗し、「適応できません」というエラー メッセージが表示されます。

impost psycopg2

con = connect(...)

def save(long_blob):
     cur = con.cursor() 
     long_data = struct.unpack('<L', long_blob)

     # grab the first result of the tuple
     long_data = long_data[0]

     cur.execute('insert into blob_records( blob_data ) values (%s)', [long_data])
于 2010-01-27T18:53:41.850 に答える
1

psycopg がlong_blob変数の型を認識していない場合、「適応できません」が発生します。何型ですか?

アダプターを簡単に登録して、データベースの値を変換する方法を psycopg に伝えることができます。

これは数値であるため、AsIsアダプターが既に機能している可能性があります。

于 2010-02-16T10:40:24.937 に答える