1

問題はこれです:(pl)pythonコードでは、整数= 26663を計算しました。hex(myint)= 0x6827を使用して、これを16進数に簡単に変換できます

ここまでは順調ですね!

では、この値を-文字列の連結に-PostgreSQL(v9)byteaフィールドに書き込む方法は?これが重要な場合、DBはUTF8でエンコードされます。

EG、これらの例はどちらも機能しません:

もちろん、ここでは、「str」オブジェクトと「int」オブジェクトを連結することはできません。

rv = plpy.execute(plan, [ (string1 + 6827) ])

これは0x6827に間違った16進コードを入力します

rv = plpy.execute(plan, [ (string1 + str('6827')) ])

ヘルプ!

4

1 に答える 1

2

私はPostgresに精通していませんが、この関数は16進数hex(n)のの数値の文字列表現を返します。nこれを文字列と連結するための私の意見で最も良い方法は、フォーマット文字列を使用することです。例えば:

rv = plpy.execute(plan, [ ( 'foo %s bar' % hex(6827) ) ] )

文字列が実際にはと呼ばれる変数string1にあり、16進値を追加するだけでよい場合は、+記号を使用した単純な連結で問題なく機能します。

rv = plpy.execute(plan, [ ( string1 + hex(6827) ) ])

hex()関数は文字列を返すため、これは変換なしで機能します。

印刷可能な文字列表現ではなく、バイナリ文字列を実際に保存する場合は、structモジュールを使用してバイトの配列を作成します。

import struct
bytes = struct.pack('i', 6827) # Ignoring endianness

多くの人が「バイナリ」として何かを保存することの実際の意味について混乱しています。byteaバイナリ保存を目的としているように見えるフィールドタイプ()を使用しているので、これが実際に必要なことでしょうか。

バイトからの戻り値は、別の文字列と連結するか、さらに2進値をパックし続けることができる文字列になります。

詳細については、structmoduleのドキュメントを参照してください。

于 2011-08-03T16:17:39.510 に答える