如何将Spyder IDE中的DataFrame写入MS Access数据库表
将DataFrame写入MS Access数据库表的解决方案
方法一:使用pandas的to_sql方法(推荐)
这是最简洁高效的方式,pandas原生支持将DataFrame直接写入数据库表,无需手动构造INSERT语句。
完整代码示例:
import pandas as pd import pyodbc from sqlalchemy import create_engine # 读取Excel文件到DataFrame xlsx_path = r'F:\Kevin\CPD_Night\ALC_2022068_06282024.xlsx' df_ALC = pd.read_excel(xlsx_path) # 构建Access数据库连接引擎 conn_str = ( r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};' r'DBQ=F:\Kevin\CPD_Night\ALC_Testing.accdb;' ) engine = create_engine(f"access+pyodbc:///?odbc_connect={conn_str}") # 将指定列写入Access表 df_ALC[['dateofnotice', 'provnbr']].to_sql( name='tblALC_tempdata', con=engine, if_exists='append', # 可选:'fail'(表存在则报错)、'replace'(覆盖表)、'append'(追加数据) index=False # 不将DataFrame索引写入数据库表 ) # 验证写入结果 with pyodbc.connect(conn_str) as conn: cur = conn.cursor() cur.execute('SELECT * FROM tblALC_tempdata') for row in cur.fetchall(): print(row)
注意事项:
- 需提前安装依赖包:
pip install sqlalchemy pyodbc - 确保DataFrame的列名与Access表的字段名完全匹配
if_exists参数根据需求选择,避免误删已有数据
方法二:使用参数化INSERT语句(手动批量写入)
如果需要对每行数据做自定义处理,可采用参数化查询循环写入,同时避免SQL注入风险。
完整代码示例:
import pandas as pd import pyodbc # 读取Excel文件到DataFrame xlsx_path = r'F:\Kevin\CPD_Night\ALC_2022068_06282024.xlsx' df_ALC = pd.read_excel(xlsx_path) # 连接Access数据库 conn_str = r'Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=F:\Kevin\CPD_Night\ALC_Testing.accdb;' conn = pyodbc.connect(conn_str) cur = conn.cursor() # 构造参数化INSERT语句(?为占位符) sql = "INSERT INTO tblALC_tempdata (dateofnotice, provnbr) VALUES (?, ?)" # 循环写入每行数据 for _, row in df_ALC.iterrows(): cur.execute(sql, (row['dateofnotice'], row['provnbr'])) # 提交事务并关闭连接 conn.commit() cur.close() conn.close() # 验证写入结果 conn = pyodbc.connect(conn_str) cur = conn.cursor() cur.execute('SELECT * FROM tblALC_tempdata') for row in cur.fetchall(): print(row) cur.close() conn.close()
优势:
- 可在写入前对单条数据做清洗、转换等操作
- 参数化查询比字符串拼接更安全,避免SQL注入问题
内容的提问来源于stack exchange,提问作者mekcox
相关产品推荐
相关产品推荐

