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

使用Python 3.10+pyodbc写入MS Access文件时语法错误求助

解决pyodbc写入MS Access的语法错误

你的代码报错核心是SQL语句的字符串嵌套语法错误,同时还有变量传递、数据类型处理的问题,具体修正如下:

错误原因拆解

  • 字符串嵌套冲突:原INSERT语句用双引号包裹SQL,内部又直接使用双引号(即便加了转义),Python解析时会混淆引号边界,触发语法错误。
  • 变量未正确传入:直接写"item"和"price"会把字面字符串插入数据库,而非用户输入的实际值。
  • 不必要的Decimal调用:SQL语句中不需要用Python的Decimal(),直接传入数值即可,pyodbc会自动处理类型映射。

修正后的代码

import pyodbc

# 连接数据库(替换<File address>为实际文件路径)
conn = pyodbc.connect(r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};" 
                      r"DBQ=<File address>;")
cursor = conn.cursor()

# 查询现有数据(保留原有逻辑)
cursor.execute("select * from Products")
for row in cursor.fetchall():
    print(row)

# 获取用户输入
item = input("Enter the name of the item: ")
# 将价格转换为数值类型(根据你的字段类型选择float或int)
price = float(input("Enter the price of the item: "))

# 使用参数化查询(推荐方式,避免语法错误和SQL注入)
cursor.execute(
    "INSERT INTO Products (Product_ID, Product_Name, Product_Price) VALUES (?, ?, ?)",
    (6, item, price)  # 参数元组,?会自动对应位置
)
conn.commit()  # 提交事务,确保数据写入
conn.close()   # 关闭数据库连接

关键说明

  • 参数化查询:用?作为占位符,把参数单独传给execute方法,彻底避免引号嵌套问题,同时更安全(防止SQL注入)。
  • 数据类型转换:用户输入的price是字符串,必须转换为数值类型后传入,否则Access会报类型不匹配错误。
  • 事务提交:修改数据后必须调用commit(),否则数据库不会保存更改。

内容的提问来源于stack exchange,提问作者Hi2248

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:35:10