【问题标题】:Adding to an MS Access database using pyodbc使用 pyodbc 添加到 MS Access 数据库
【发布时间】:2021-02-19 16:38:28
【问题描述】:

我正在尝试在我创建的 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)')

我看过其他帖子说要检查所有使用的名称的拼写并且那里没有任何问题。那么为什么这段代码不起作用呢?

【问题讨论】:

  • 试试VALUES('User 5', 'Pass 5', 7800)""")
  • @GordThompson 这行得通,但您介意解释一下为什么使用 " 而不是 ' 会导致错误吗?

标签: ms-access pyodbc


【解决方案1】:

从 Access 应用程序本身 (MSACCESS.EXE) 内部执行的 Access SQL 查询与通过 Access ODBC 驱动程序或 Access OLEDB 提供程序从外部应用程序执行的查询之间的默认行为存在一些细微差别。

在 Microsoft Access 本身中,双引号 (") 和单引号 (') 都可用于分隔字符串文字。从最早的 Access 版本开始就是如此。

但是,ODBC 驱动程序和 OLEDB 提供程序至少尝试更符合 ANSI SQL,因此单引号 (') 用于分隔字符串文字,而双引号 (") 用于分隔表名和列名。因此,"User 5" 将被解释为列名或参数名,具体取决于此类列是否实际存在。

【讨论】:

    猜你喜欢
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 2016-10-09
    相关资源
    最近更新 更多