2010-03-03 29 views
3

导入BYTEA场到PostgreSQL数据库我有值的列表,例如:通过psycopg2

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

我想在我的PostgreSQL数据库中插入这些成bytea场,使用psycopg2,但我不熟悉在Python中的字节字符串。

达到此目的的最佳方法是什么?

回答

2

我不知道这是否是正确的做法,但以下似乎工作:

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