python - pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] 参数太少。预期为 9. (-3010) (SQLExecDirectW)')
问题描述
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()
解决方案
只需使用参数将 Python 值传递给 SQL。请记住 SQL 是一种特殊用途,它以 Python 等通用语言分层。这两层自然不会与彼此的环境通信,因此我们必须通过与 DB-API(如pyodbc
.
具体来说,Access SQL 不知道您在子句中使用的 9 个范数变量是什么。VALUES
因此,它会因缺少参数而出错。因此,将参数相应地传递给?
占位符。
# 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()
推荐阅读
- gridex - Janus Gridex Exporter 至臻完美
- matlab - MATLAB linear least squares with sparse b
- java - 递归调用中的预增量
- apache-spark - 运行 Zeppelin Notebook 时出现 AbstractMethodError
- php - PHP Google Classroom API turnin() TurnInStudentSubmissionRequest
- html - 对齐项目:居中;不适用于截断的菜单
- swift - 如何使用 OSLog 记录泛型类型的值?
- java - Java 和 Makefiles:有没有办法确保一个类是否依赖于另一个类,首先构建该类而不是明确的?
- tensorflow - 如何构建 TensorFlow 新 GPU 运算
- python - sqlite3:使用一行中的两列进行计算