Импорт поля bytea в базу данных PostgreSQL через psycopg2 - PullRequest
3 голосов
/ 03 марта 2010

У меня есть список значений как таковой:

row = ['0x14', '0xb6', '0xa1', '0x0', '0xa1', '0x0']

Я хотел бы вставить их в поле bytea в моей базе данных PostgreSQL, используя psycopg2, но я незнаком со строками байтов в python.

Каков наилучший способ достичь этого?

1 Ответ

2 голосов
/ 03 марта 2010

Я не уверен, что это правильный путь, но похоже, что работает следующее:

    row = ['0x14', '0xb6', '0xa1', '0x0', '0xa1', '0x0']
    as_hex = ''.join(byte[2:].zfill(2) for byte in row)
  # as_hex = '14b6a100a100'
    bytes = buffer(as_hex.decode('hex'))

    cur.execute("INSERT INTO mylog (binaryfield) VALUES (%(bytes)s)", 
                {'bytes': bytes})

Просто примечание: при извлечении из базы данных psycopg2 предоставляет его в качестве буфера, первые 4 байта которого составляют общую длину, поэтому получите исходные данные как:

    cur.execute("SELECT binaryfield FROM mylog")
    res = cur.fetchone()
    my_data = str(res[4:]).encode('hex')

Затем строку можно разбить на пары и привести к integers.

...