使用Python3.11、pypyodbc与tkinter无法删除/编辑SQL数据库行求助
问题原因与修复方案
这不是tkinter和pypyodbc的兼容问题,是代码里的几个细节错误导致的:
- 参数传递格式错误:pypyodbc的
execute方法要求查询参数必须是列表、元组或行对象,你直接传单个变量boxRow不符合要求,所以抛出TypeError。 - commit调用错误:
cursor.commit只是引用方法,没有执行,必须加括号cursor.commit()才会提交事务。 - SQL字段名写错:你的delete语句里用了
boxSelectionRow作为查询条件字段,但实际查询的字段是boxRow,字段名不匹配会导致删除逻辑失效。
修正后的删除代码
boxRow = boxSelectionRow[0][5] conn = pypyodbc.connect(connection_string) cursor = conn.cursor() # 修正字段名,将参数包装成元组(注意逗号不能少,否则会被当成单个变量) cursor.execute('''delete from boxinventory where boxRow = ?''', (boxRow,)) # 执行commit提交事务 cursor.commit() # 记得关闭数据库连接 conn.close()
额外优化建议
- 数据库连接可以复用,不用每次操作都重新创建连接,减少资源消耗。
- 操作数据库时建议用
with语句自动管理连接和游标,避免遗漏关闭操作:
boxRow = boxSelectionRow[0][5] with pypyodbc.connect(connection_string) as conn: with conn.cursor() as cursor: cursor.execute('''delete from boxinventory where boxRow = ?''', (boxRow,)) conn.commit() # 用with时也可以直接调用conn.commit()
内容的提问来源于stack exchange,提问作者Jim Mehus
相关产品推荐
相关产品推荐

