【问题标题】:pyodbc - add column to MS Access with default valuepyodbc - 使用默认值将列添加到 MS Access
【发布时间】:2018-07-31 19:27:22
【问题描述】:

我正在尝试使用 pyodbc 和 Python 3.5 向 MS Access 数据库表中添加一列。

使用表达式

self.cursor.execute("ALTER TABLE data ADD COLUMN testColumn TEXT(10)")

工作正常,但是当我尝试添加默认值(默认“否”)时,它会引发语法错误。我尝试了多种组合,但没有运气。

非常感谢任何帮助!

干杯

【问题讨论】:

    标签: python-3.x ms-access pyodbc alter-table


    【解决方案1】:

    遗憾的是,Access ODBC 驱动程序根本不支持CREATE/ALTER TABLE 语句中的列的DEFAULT 子句。 Access 的 ODBC 驱动程序和 OLEDB 提供程序在 DDL 支持方面有所不同,因此不幸的是,对于相同的 DDL 语句,我们可能会得到不一致的结果,如下面使用 ADO 的 VBScript 代码所示:

    OLEDB 工作正常...

    Option Explicit
    Dim conn
    Set conn = CreateObject("ADODB.Connection")
    Dim connStr
    connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Public\mdbTest.mdb"
    conn.Open connStr
    
    On Error Resume Next
    conn.Execute "DROP TABLE Cheeses"
    On Error GoTo 0
    conn.Execute "CREATE TABLE Cheeses (Id LONG PRIMARY KEY, CheeseName TEXT(50) DEFAULT 'Cheddar')"
    
    conn.Execute "INSERT INTO Cheeses (Id) VALUES (1)"
    
    Dim rst
    Set rst = CreateObject("ADODB.Recordset")
    rst.Open "SELECT CheeseName FROM Cheeses WHERE Id = 1", conn
    If rst("CheeseName").Value = "Cheddar" Then
        WScript.Echo "Success"
    End If
    
    conn.Close
    

    ...但是如果我们将连接字符串更改为使用 ODBC ...

    connStr = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\Users\Public\mdbTest.mdb"
    

    ...然后我们尝试执行CREATE TABLE 语句失败

    用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序:[Microsoft][ODBC Microsoft Access Driver] CREATE TABLE 语句中的语法错误。

    TL;DR - 您不能在 pyodbc 下的 CREATE/ALTER TABLE 语句中使用 DEFAULT 子句。

    【讨论】:

    • 感谢您的回复和解释 Gord。我最终创建了(空)列,然后通过运行更新查询用默认值填充它。不漂亮或效率不高,但对于我现在的目的来说已经足够了。
    • 很好的答案。缺少官方文档(或永久消失/过时!),但docs.microsoft.com/en-us/previous-versions/office/developer/… 有以下我认为相关的行:The DEFAULT statement can be executed only through the Jet OLE DB provider and ADO. It will return an error message if used through the Access SQL View user interface. 我自己在 C# 和 .NET 中的实验表明 ODBC 驱动程序与@987654330 有相同的问题@,但 OleDB 可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 2018-11-14
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多