1

我已经安装了 sql-alchemy Access,这样我就可以使用 pandas 和 pyodbc 来查询我的 Access DB。

问题是,它非常慢,因为它执行单行插入。另一篇文章建议我使用 method='multi' 虽然它似乎适用于提出这个问题的人,但它会为我抛出一个 CompileError 。

CompileError:具有当前数据库版本设置的“访问”方言不支持就地多行插入。

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')
4

1 回答 1

2

Access SQL 不支持多行插入,因此 ato_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。请注意双引号和单引号的组合,将它们嵌入到其他编程语言中时可能会有些痛苦。

于 2022-02-03T20:01:01.990 回答