Python2操作Access更新表时遇'参数不足(07002)'错误求助
这个错误我之前帮别人排查过好几次,核心原因就是Access ODBC驱动把它无法识别的字段/表名当成了需要传入的参数,所以才会报“参数不足”。结合你的情况,我给你一步步分析和解决:
首先看你写的SQL和代码里的几个问题:
1. 最可能的问题:字段名拼写错误
你SQL里的关联条件写了户结构查询结果.户结构=户结构.户规模,但根据你提供的表结构描述,你的户结构表中应该没有户规模这个字段吧?大概率是笔误,比如实际字段名是户结构,你写成了户规模。驱动找不到这个字段,就会把它当作一个参数,自然就报“Expected 1”了。
2. 表名/字段名需要用方括号包裹
Access的ODBC驱动对中文名称的兼容性不算太好,尤其是当名称是纯中文时,一定要用[]把表名和字段名括起来,避免驱动误解析。
3. commit()的调用方式错误
你写的cur.execute(...).commit()是错的!execute()方法不会返回连接对象,commit()是属于数据库连接的方法,应该分开执行:先执行SQL,再调用连接的commit方法。
修正后的代码(分两种写法)
写法一:子查询方式(先确保字段名正确)
# 先确认字段名:如果户结构表的关联字段是「户结构」而不是「户规模」,就这么写 cur.execute(u""" UPDATE [户结构] SET [抽样数] = ( SELECT [抽样数] FROM [户结构查询结果] WHERE [户结构查询结果].[行政区] = [户结构].[行政区] AND [户结构查询结果].[户结构] = [户结构].[户结构] ) """) # 调用连接的commit方法,如果你是用conn获取的游标,就用conn.commit() cur.connection.commit()
写法二:JOIN方式(Access更推荐的更新关联表的写法)
有时候Access的ODBC驱动对子查询的支持不太友好,改用JOIN的方式更稳妥:
cur.execute(u""" UPDATE [户结构] INNER JOIN [户结构查询结果] ON [户结构].[行政区] = [户结构查询结果].[行政区] AND [户结构].[户结构] = [户结构查询结果].[户结构] SET [户结构].[抽样数] = [户结构查询结果].[抽样数] """) cur.connection.commit()
最后再检查一遍:
- 对照你的表结构,确认
户结构表中用于关联的字段名称,一定要和SQL里写的完全一致(包括大小写,Access虽然不区分,但最好严格对应)。 - 所有中文的表名、字段名都用
[]括起来。 - 不要把
execute()和commit()连写,分开执行。
内容的提问来源于stack exchange,提问作者chen
相关产品推荐
相关产品推荐

