问题描述
我正在尝试添加到我创建的 Access 数据库中名为 Users
的表中。我正在使用以下代码来执行此操作(已从 here 复制):
import pyodbc
def createAccount():
conn = pyodbc.connect(r"Driver={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=myPath\User Database.accdb;")
cursor = conn.cursor()
cursor.execute("""
INSERT INTO Users(Username,Password,Chips)
VALUES("User 5","Pass 5",7800)""")
conn.commit()
但我收到此错误:
pyodbc.Error: ('07002','[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters.
Expected 2. (-3010) (sqlExecDirectW)')
我看到其他帖子说要检查所有使用名称的拼写,那里没有任何问题。那么为什么这段代码不起作用?
解决方法
从 Access 应用程序本身 (MSACCESS.EXE) 中执行的 Access SQL 查询与通过 Access ODBC 驱动程序或 Access OLEDB 提供程序从外部应用程序执行的查询之间的默认行为存在一些细微差别。
在 Microsoft Access 内部,双引号 ("
) 和单引号 ('
) 均可用于分隔字符串文字。自 Access 的最早版本以来,情况一直如此。
但是,ODBC 驱动程序和 OLEDB 提供程序至少尝试更紧密地符合 ANSI SQL,因此使用单引号 ('
) 来分隔字符串文字,而使用双引号 ("
)用于分隔表名和列名。因此,"User 5"
将被解释为列名或参数名,具体取决于此类列是否实际存在。