为什么这是 Python 错误代码:参数太少。预期1。 (-3010) 在使用 pyodbc 时发生?

Why is this Python error code: Too Few parameters. Expected1. (-3010) occurring when using pyodbc?

我正在编写一个 python 脚本来执行一些 SQL 代码,但是每当我调用包含此 SQL 的函数时,它都会给我错误:

File "Z:/ ... /Script.py", line 40, in Function

cnxn.execute("""INSERT INTO Table1 VALUES (007, Bond);""")

Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. (-3010) (SQLExecDirectW)')

我研究了这个问题,发现其他帖子也有同样的错误,但我似乎无法将给出的答案应用到我的代码中。例如: facing Too few parameters. Expected 1. (-3010) (SQLExecDirectW)')" error in python program

import pyodbc
conn_str = (
        r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
        r'DBQ=Z:\ ... \DB.accdb;'
        )
cnxn = pyodbc.connect(conn_str)
crsr = cnxn.cursor()
cnxn.execute("""INSERT INTO Table1 VALUES (007, Bond);""")

我最初只有单引号,并尝试了 Navnath 在他的回答中所说的并使用三引号,但没有任何改变。我相信我的 SQL 语法是正确的,所以我不明白为什么这种方法不起作用以及为什么会出现此错误。任何帮助将不胜感激!

您的问题似乎是您 运行 来自连接的 .execute() 方法,而不是来自您打开的游标。此外,明确并使用绑定变量总是更好。试试这个?

import pyodbc
conn_str = (
        r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
        r'DBQ=Z:\ ... \DB.accdb;'
        )
cnxn = pyodbc.connect(conn_str)
crsr = cnxn.cursor()

crsr.execute(
    """
    INSERT INTO Table1 (agent_number, agent_last_name) VALUES (?, ?)
    """,
    ('007', 'Bond')
)

根据您的连接情况,您之后可能还需要执行 .commit(),因为您要插入、更新或删除数据。祝你好运!