pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] 参数太少。预期为 9. (-3010) (SQLE
Posted
技术标签:
【中文标题】pyodbc.Error: (\'07002\', \'[07002] [Microsoft][ODBC Microsoft Access Driver] 参数太少。预期为 9. (-3010) (SQLExecDirectW)\')【英文标题】:pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 9. (-3010) (SQLExecDirectW)')pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] 参数太少。预期为 9. (-3010) (SQLExecDirectW)') 【发布时间】:2019-08-31 21:14:12 【问题描述】:conn = pyodbc.connect(r'Driver=Microsoft Access Driver (*.mdb, *.accdb);DBQ=D:/flame/meysam.accdb;')
cursor_2 = conn.cursor()
cursor_2.execute('''
INSERT INTO normal (data_norm_x1, data_norm_x2, data_norm_x3,data_norm_t1,data_norm_t2,data_norm_t3,data_norm_d1,data_norm_d2,data_norm_d3)
VALUES(norm_x1, norm_x2,norm_x3,norm_t1,norm_t2,norm_t3,norm_d1,norm_d2,norm_d3)
''')
conn.commit()
【问题讨论】:
【参考方案1】:只需使用参数将 Python 值传递给 SQL。请记住 SQL 是一种特殊用途,它以 Python 等通用语言分层。这两层自然不会与彼此的环境通信,因此我们必须通过与pyodbc
之类的 DB-API 接口来传递或接收数据。
具体来说,Access SQL 不知道您在VALUES
子句中使用的 9 个 norm 变量是什么。因此,它会因缺少参数而出错。所以将参数相应地传递给?
占位符。
# PREPARED STATEMENT WITH Q MARK PLACEHOLDERS
sql = """INSERT INTO normal (data_norm_x1, data_norm_x2, data_norm_x3,
data_norm_t1, data_norm_t2, data_norm_t3,
data_norm_d1, data_norm_d2, data_norm_d3)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
"""
# RUN ACTION QUERY AND BIND TUPLE OF PARAMS TO SQL
cursor_2.execute(sql, (norm_x1, norm_x2, norm_x3,
norm_t1, norm_t2, norm_t3,
norm_d1, norm_d2, norm_d3)
)
conn.commit()
【讨论】:
【参考方案2】:我就是这样做的。
# insert data into 2 fields in a table
import pyodbc
conn = pyodbc.connect(r'Driver=Microsoft Access Driver (*.mdb, *.accdb);DBQ=C:\\your_path\\Test.accdb;')
cursor = conn.cursor()
cursor.execute(''' INSERT INTO Table1 (ID, Initials)
VALUES(1, 'RMS') ''')
conn.commit()
【讨论】:
以上是关于pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] 参数太少。预期为 9. (-3010) (SQLE的主要内容,如果未能解决你的问题,请参考以下文章
在Docker化Python API / Flask APP时给出pyodbc.Error
07002 [Microsoft][ODBC SQL Server Driver]COUNT 字段不正确或语法错误
错误 [07002] [Microsoft][ODBC Microsoft Access Driver] 参数太少。执行 DELETE 时预期为 1
RODBC 与 ms-access 错误 07002 17 [Microsoft][ODBC Microsoft Access Driver]COUNT 字段不正确