Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用python将mssql中的二进制数据插入sqlite3_Python_Sqlite_Pyodbc - Fatal编程技术网

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

无法使用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()的形式返回给我 这是我运行

我正在尝试查询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元组中的值。