![](/img/trans.png)
[英]Unable to insert binary data from mssql into sqlite3 using python
[英]Insert data from MSSQL into SQLite in Python3
我正在使用Python 3.6。 我在MSSQL中有一张大表,我想在其中提取数据,然后在python中处理它,然后保存数据。 目前,我在使用sqlite和pyodbc返回值时遇到问题:
import sqlite3
import pyodbc
tempConn = sqlite3.connect('example.db')
c = tempConn.cursor()
c.execute(
''' CREATE TABLE IF NOT EXISTS addresses
(
amt NUMERIC,
city text,
statecode text,
zipcode text
)
'''
)
conn = pyodbc.connect(
r'DRIVER={ODBC Driver 11 for SQL Server};'
r'SERVER=<server>;'
r'DATABASE=<database>;'
r'UID=user;'
r'PWD=password'
)
conn.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
conn.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
conn.setencoding(encoding='utf-8')
cursor = conn.cursor()
cursor.execute("SELECT TOP 10 fd.Amt, fd.City, fd.StateCode, fd.ZipCode FROM <large table> AS fd")
index = 1
rows = cursor.fetchall()
for row in rows:
print('Row Data:')
print(row)
print('')
try:
c.executemany("INSERT INTO addresses VALUES (?,?,?,?)", row)
rowcount = c.execute("SELECT COUNT(*) FROM addresses")
except sqlite3.Error as er:
print('er: ', er.Message)
print(rowcount)
我收到的错误是:
行数据:(十进制('1000.000'),'芝加哥','IL','9999')
追溯(最近一次呼叫最近):c.executemany中的文件“ dataaccess.py”,第37行(“ INSERT INTO address VALUES(?,?,?,?)”,行)ValueError:参数的类型不受支持
我相信这是因为pyodbc返回的十进制正在插入“ Decimal('')”,尽管我不知道该如何验证。 如何将来自MSSQL的数据插入python中的sqlite中?
考虑使用float()
转换需要扩展行项目的Decimal('##')
。
for row in rows:
...
c.execute("INSERT INTO addresses VALUES (?,?,?,?)",
(float(row[0]), row[1], row[2], row[3]))
同样,在这种情况下, executemany
与execute
相同,因为您传递了一个列表而不是列表/元组的列表。 要使用批量运算符,请绕过for
循环(仍需要扩展):
rows = cursor.fetchall()
c.executemany("INSERT INTO addresses VALUES (?,?,?,?)",
[(float(row[0]), row[1], row[2], row[3]) for row in rows])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.