проблема заключается в следующем: in (pl) код python, мы вычислили целое число = 26663. Может легко преобразовать это в hex с помощью hex (myint) = 0x6827
Все идет нормально!
Теперь, как записать это значение -into в конкатенацию strings- в поле postgreSQL (v9) bytea? БД кодируется UTF8, если это имеет значение.
EG, ни один из этих примеров не будет работать:
Здесь, конечно, я не могу объединить объекты "str" и "int":
rv = plpy.execute(plan, [ (string1 + 6827) ])
Этот вход вводит неверный шестнадцатеричный код для 0x6827
rv = plpy.execute(plan, [ (string1 + str('6827')) ])
Помогите!
Я не знаком с Postgres, но функция hex(n)
возвращает строковое представление числового значения n
в шестнадцатеричном формате. Самый лучший способ, по моему мнению, связать это со строкой - использовать строки форматирования. Например:
rv = plpy.execute(plan, [ ( 'foo %s bar' % hex(6827) ) ] )
Если строка действительно находится в переменной с именем string1
, и вам нужно только добавить ее с шестнадцатеричным значением, тогда простая конкатенация с использованием знака + будет работать нормально:
rv = plpy.execute(plan, [ ( string1 + hex(6827) ) ])
Это работает без преобразования, потому что функция hex() возвращает строку.
Если вы фактически не хотите хранить печатное строковое представление, а скорее двоичную строку, используйте модуль struct для создания массива байтов.
import struct
bytes = struct.pack('i', 6827) # Ignoring endianness
Многие люди смущены тем, что на самом деле означает что-то вроде "двоичного", и поскольку вы используете тип поля (bytea
), который, как представляется, предназначен для двоичного хранения, возможно, это то, что вы на самом деле хотите?
Возвращаемое значение из байтов будет строкой, которую вы можете либо объединить с другой строкой, либо продолжить паковать больше двоичных значений.
Дополнительную информацию см. В документации по модулю.