我已经安装了sql-炼金术访问,以便我能够使用熊猫和pyodbc查询我的Access DB。
问题是,它非常慢,因为它执行单行插入。另一篇文章建议我使用方法=‘multi’,虽然它似乎适用于问这个问题的人,但它为我抛出了一个CompileError。
CompileError:带有当前数据库版本设置的“access”方言不支持就地多行插入。
AttributeError:“CompileError”对象没有属性“orig”
import pandas as pd
import pyodbc
import urllib
from sqlalchemy import create_engine
connection_string = (
r"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};"
rf"DBQ={accessDB};"
r"ExtendedAnsiSQL=1;"
)
connection_uri = f"access+pyodbc:///?odbc_connect={urllib.parse.quote_plus(connection_string)}"
engine = create_engine(connection_uri)
conn = engine.connect()
# Read in tableau SuperStore data
dfSS = pd.read_excel(ssData)
dfSS.to_sql('SuperStore', conn, index=False, method='multi')发布于 2022-02-03 20:01:01
Access SQL不支持多行插入,因此to_sql也永远无法支持它们。另一篇文章可能在使用SQLite。
相反,您可以将数据帧写入CSV,并使用查询插入CSV。
或者,当然,根本不读取Python中的Excel,而只是按查询插入Excel文件。这总是要快得多,因为Access可以直接读取数据,而不是Python读取数据,然后传输数据。
例如。
INSERT INTO SuperStore
SELECT * FROM [Sheet1$] IN "C:\Path\To\File.xlsx"'Excel 12.0 Macro;HDR=Yes'您应该能够使用pyodbc执行此操作,而不需要涉及sqlalchemy。请注意双引号和单引号的组合,它们在其他编程语言中嵌入时可能会有些痛苦。
https://stackoverflow.com/questions/70977237
复制相似问题