我已經安裝了 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')
uj5u.com熱心網友回復:
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。請注意雙引號和單引號的組合,將它們嵌入到其他編程語言中時可能會有些痛苦。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/429084.html
