我正在尝试查询Microsoft SQL 2005数据库,处理数据并将密钥写入我在本机上本地更新到sqllite3数据库存储的数据。
我使用的工具是python 2.7,pyodbc和sqllite3。我在Windows 7和驱动程序上我尝试使用sql服务器和sql本机客户端驱动程序与pyodbc连接到我的mssql数据库,两者都产生相同的结果。
我遇到问题的字段是mssql中的二进制(16)uuid字段。当我使用pyodbc查询数据时,它会在bytearray()中回复给我。
这是我运行以下内容时得到的输出。
id = mycursor.fetchone()
print id
AO÷EAO <1ÝWt'E
repr(id)
字节组(B '\ xe0O \ XF7 \ X1D \ x9de \ xc5O \ x8b1 \ x0e \ xddWt \ x91E')
当我将该Id插入sqllite3数据库时,我得到以下内容。
s = sqlite3.connect('tmp.db')
cursor = s.cursor()
s.execute("create table recs(uuid blob)")
s.commit()
s.execute("insert into recs (uuid) values(?)", id)
1 s.execute(“插入recs(uuid)值(?)”,id)
ProgrammingError:提供的绑定数量不正确。当前语句使用1,并且提供了16个。
答案 0 :(得分:0)
Python值必须是buffer
对象:
>>> s.execute("insert into recs (uuid) values(?)", (buffer(id), ))
<sqlite3.Cursor object at 0x011CD2E0>
>>> r = s.execute("select * from recs").fetchone()
>>> r
(<read-write buffer ptr 0x011F9280, size 16 at 0x011F9260>,)
>>> r[0]
<read-write buffer ptr 0x011F9280, size 16 at 0x011F9260>
>>> str(r[0])
'\xe0O\xf7\x1d\x9de\xc5O\x8b1\x0e\xddWt\x91E'
>>> str(r[0]) == id
True