【发布时间】:2017-10-16 10:00:47
【问题描述】:
我正在尝试将数据从 python pandas 数据帧导出到现有的 MS Access 表,我想用已更新的数据替换 MS Access 表(在 python 中) 我曾尝试使用 pandas.to_sql,但收到一条错误消息。我觉得这很奇怪,使用 pandas.read_sql 可以无缝工作?
这是我的代码:
import pyodbc
import pandas as pd
conn_str = (
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=H:\Work\IndexTrader\Data\database\IndexData.accdb;'
)
cnxn = pyodbc.connect(conn_str)
SQL = 'SELECT * FROM Index_data;
从 MS Access 读取数据没问题,见下文
dfins = pd.read_sql(SQL, cnxn)
但是,当我尝试回写并替换 MS 过量的表时,它不起作用?
dfins.to_sql('Index_data', cnxn, if_exists='replace')
cnxn.close()
我得到的错误是:
DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': ('42S02', "[42S02] [Microsoft][ODBC Microsoft Access Driver] The Microsoft Access database engine cannot find the input table or query 'sqlite_master'. Make sure it exists and that its name is spelled correctly. (-1305) (SQLExecDirectW)")
如果有替代 pandas.to_sql 的替代方法,那也会有所帮助,我只需要知道如何导出我的数据。
【问题讨论】:
-
如果您查看documentation,它指出仅支持 sqlite3。您可以逐行解析数据帧并使用 INSERT 语句。
-
您好 Erik,感谢您的回复,我不太确定如何使用 INSERT?请您提供更多指导。