You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame插入MS Access数据库时触发Type Error报错的问题求助

Pandas DataFrame插入MS Access数据库时触发Type Error报错的问题求助

嘿,我来帮你搞定这个插入错误的问题!你碰到的TypeError其实是两个小问题导致的,咱们一步步来解决:

错误原因分析

  1. SQL语句格式错误
    你写的插入语句"INSERT INTO Payments VALUES (:0:1,:2,:3)"里,:0和:1之间少了逗号,直接导致整个SQL字符串无效——这就是报错“The first argument to execute must be a string or Unicode query”的直接原因。另外,pyodbc针对MS Access数据库,更推荐用?作为位置占位符,兼容性会更好。

  2. 批量插入方法用错
    conn.execute()是用来执行单条SQL语句的,如果你要一次性插入多行数据,应该用cursor.executemany()方法,而不是直接把多行数据传给execute()。

修正后的完整代码

下面是调整后的可运行代码,我还加了异常处理来保证数据安全:

import streamlit as st
import pyodbc
import pandas as pd

# 建立数据库连接
conn_str = (r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
            r'DBQ=C:\iqra\mfa.accdb;')
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()

# 读取数据到DataFrame(这部分你的代码是正确的)
query = "SELECT * FROM Payments"
dataf = pd.read_sql(query, conn)

# 准备插入的数据行(务必保证DataFrame的列顺序和Payments表的列顺序完全一致)
rows = [tuple(x) for x in dataf.values]

try:
    # 用?作为占位符,数量和Payments表的列数对应(这里假设是4列)
    insert_query = "INSERT INTO Payments VALUES (?, ?, ?, ?)"
    # 使用executemany批量插入多行数据
    cursor.executemany(insert_query, rows)
    conn.commit()
    print("数据批量插入成功!")
except Exception as e:
    # 出错时回滚事务,避免数据不一致
    conn.rollback()
    print(f"插入失败,错误信息:{str(e)}")
finally:
    # 不管成功失败,最后都要关闭游标和连接
    cursor.close()
    conn.close()

关键注意事项

  • 请确认Payments表的列数是4列,如果实际列数不同,要对应调整insert_query里?的数量。
  • 必须保证DataFrame的列顺序和Access表的列顺序完全匹配,否则插入的数据会错位,甚至触发数据类型不匹配的错误。
  • 加入异常处理是个好习惯,能在出错时及时回滚,避免数据库里出现半插入的脏数据。

备注:内容来源于stack exchange,提问作者Muhammad abdullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 14:18:00