我正在尝试使用pyodbc和Python 3.5向MS Access数据库表中添加一列。
使用表达式
self.cursor.execute("ALTER TABLE data ADD COLUMN testColumn TEXT(10)")
可以正常工作,但是当我尝试添加默认值(DEFAULT“ no”)时,它将引发语法错误。我尝试了多种组合,但是没有运气。
非常感谢您的帮助!
欢呼
答案 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
子句。