无法使用python将mssql中的二进制数据插入sqlite3
我正在尝试查询Microsoft SQL 2005数据库,处理数据并将更新数据的密钥写入计算机上本地的sqllite3数据库存储 我使用的工具是Python2.7、pyodbc和sqllite3。我使用的是windows 7和驱动程序,我尝试使用sql server和sql本机客户端驱动程序以及pyodbc连接到mssql db,两者都产生相同的结果 我遇到问题的字段是mssql中二进制(16)的uuid字段。当我使用pyodbc查询数据时,它会以bytearray()的形式返回给我 这是我运行以下程序时得到的输出无法使用python将mssql中的二进制数据插入sqlite3,python,sqlite,pyodbc,Python,Sqlite,Pyodbc,我正在尝试查询Microsoft SQL 2005数据库,处理数据并将更新数据的密钥写入计算机上本地的sqllite3数据库存储 我使用的工具是Python2.7、pyodbc和sqllite3。我使用的是windows 7和驱动程序,我尝试使用sql server和sql本机客户端驱动程序以及pyodbc连接到mssql db,两者都产生相同的结果 我遇到问题的字段是mssql中二进制(16)的uuid字段。当我使用pyodbc查询数据时,它会以bytearray()的形式返回给我 这是我运行
id = mycursor.fetchone()
print id
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)
O÷�eÅOè1ÝWt'e
repr(id)
字节数组(b'\xe0O\xf7\x1d\x9de\xc5O\x8b1\x0e\xddWt\x91E')
当我将该Id插入sqllite3数据库时,我得到以下信息
id = mycursor.fetchone()
print id
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)
编程错误:提供的绑定数量不正确。当前语句使用1,提供了16个。Python值需要是一个
缓冲区对象:
>>> 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
s.execute(“插入recs(uuid)值(?),(缓冲区(id),)
>>>r=s.execute(“select*from recs”).fetchone()
>>>r
(,)
>>>r[0]
>>>str(r[0])
“\xe0O\xf7\x1d\x9de\xc5O\x8b1\x0e\xddWt\x91E”
>>>str(r[0])==id
真的
我把它拿回去,这样就行了!我缺少了括号。非常感谢你!MRAB我做了一些研究,我知道了为什么现在需要缓冲区,但仍然不清楚为什么它需要在元组中。execute
方法要求占位符的值在元组中。碰巧在本例中有1个占位符,因此它需要1元组中的值。