繁体   English   中英

将资料从MSSQL插入Python3中的SQLite

[英]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]))

同样,在这种情况下, executemanyexecute相同,因为您传递了一个列表而不是列表/元组的列表。 要使用批量运算符,请绕过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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM