2016-06-21 22 views
1

我使用pypyodbc模塊創建數據庫並在其中添加一個表。使用Access ODBC使用DECIMAL列的CREATE TABLE

我使用的代碼如下:

import pypyodbc 
pypyodbc.win_create_mdb('D:\\test.mdb') 
connection_string = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\test.mdb' 
connection = pypyodbc.connect(connection_string) 
SQL = "CREATE TABLE [test] ([FID] INT,[AREA] FLOAT,[CODE] VARCHAR(10),[X_CO] DECIMAL(10,3));" 
connection.cursor().execute(SQL) 
connection.commit() 
connection.close() 

上面的代碼創建數據庫,但是當它來創建表會產生錯誤。錯誤是:

ProgrammingError: (u'42000', u'[42000] [Microsoft] [ODBC Microsoft Access Driver] Syntax error in defining field.

從搜索,我發現這個問題是小數類型的最後一個字段的網頁,當我從查詢中刪除它,它創建表。

我也嘗試在Access中更改選項以使數據庫與ANSI 92兼容,當我這樣做時,表可以從Access內部創建。

因爲這個過程必須完成數百個數據庫,我想在python循環中做到這一點,但要做到這一點,創建數據庫和表必須從上面的代碼完成。

我在語法中缺少什麼? 有誰知道這是否是模塊的問題?

回答

2

Access ODBC驅動程序中的DDL處理有許多缺陷,不幸的是您遇到過其中一個缺陷。如果你想創建一個表格與DECIMAL列,您將需要使用adodbapipywin32(釋放211或更高版本)和Access OLEDB提供程序執行CREATE TABLE聲明:

# -*- coding: utf-8 -*- 
import adodbapi # (from pywin32) 
conn_str = (
    r"Provider=Microsoft.Jet.OLEDB.4.0;" 
    r"Data Source=C:\Users\Public\2003test.mdb;" 
    ) 
conn = adodbapi.connect(conn_str) 
crsr = conn.cursor() 
sql = """\ 
CREATE TABLE [test] (
    [FID] INT, 
    [AREA] FLOAT, 
    [CODE] VARCHAR(10), 
    [X_CO] DECIMAL(10,3)) 
""" 
crsr.execute(sql) 
conn.commit() 
crsr.close() 
conn.close() 
+0

謝謝你。它如你所說的那樣工作! – Panos