Pyodbc Connection to Access,创建 table with Pandas to_sql(method='multi') 抛出错误
Pyodbc Connection to Access, creating table with Pandas to_sql(method='multi') throwing errror
我已经安装了 sql-alchemy Access,这样我就可以使用 pandas 和 pyodbc 来查询我的 Access 数据库。
问题是,它非常慢,因为它执行单行插入。另一个 post 建议我使用 method='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')
Access SQL 不支持 multi-row 插入,因此 to_sql
也永远无法支持它们。其他 post 可能正在使用 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。请注意双引号和单引号的组合,将它们嵌入其他编程语言时可能会有点痛苦。
我已经安装了 sql-alchemy Access,这样我就可以使用 pandas 和 pyodbc 来查询我的 Access 数据库。
问题是,它非常慢,因为它执行单行插入。另一个 post 建议我使用 method='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')
Access SQL 不支持 multi-row 插入,因此 to_sql
也永远无法支持它们。其他 post 可能正在使用 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。请注意双引号和单引号的组合,将它们嵌入其他编程语言时可能会有点痛苦。