[英]Pyodbc Connection to Access, creating table with Pandas to_sql(method='multi') throwing errror
我已经安装了 sql-alchemy Access,以便能够使用 pandas 和 pyodbc 来查询我的 Access 数据库。
问题是,它非常慢,因为它执行单行插入。 另一篇文章建议我使用 method='multi' 虽然它似乎适用于提出这个问题的人,但它会为我抛出一个 CompileError 。
CompileError:具有当前数据库版本设置的“访问”方言不支持就地多行插入。
AttributeError: 'CompileError' object 没有属性 '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')
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。 请注意双引号和单引号的组合,将它们嵌入到其他编程语言中时可能会有些痛苦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.