0

我正在尝试查询 Microsoft SQL 2005 数据库,处理数据并将密钥写入我更新到本地机器上的 sqllite3 数据库存储的数据中。

我使用的工具是 python 2.7、pyodbc 和 sqllite3。我在 Windows 7 上,我尝试使用带有 pyodbc 的 sql server 和 sql 本机客户端驱动程序连接到我的 mssql db 的驱动程序,两者都产生相同的结果。

我遇到问题的字段是 mssql 中的二进制(16)的 uuid 字段。当我使用 pyodbc 查询数据时,它会以 bytearray() 形式返回给我。

这是我运行以下命令时得到的输出。

id = mycursor.fetchone()
print id

àO÷�eÅO‹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 个。

4

1 回答 1

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
于 2012-08-06T19:41:19.637 回答