pyodbc-使用默认值将列添加到MS Access

时间:2018-07-31 19:27:23

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

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

使用表达式

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

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

非常感谢您的帮助!

欢呼

1 个答案:

答案 0 :(得分:2)

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

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驱动程序] CREATE TABLE语句中的语法错误。

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

相关问题