使用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
相关产品推荐
相关产品推荐

