无法使用python将mssql中的二进制数据插入sqlite3

时间:2012-08-06 19:07:24

标签: python sqlite pyodbc

我正在尝试查询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个。

1 个答案:

答案 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