1

我正在使用 pypyodbc 模块创建一个数据库并在其中添加一个表。

我使用的代码如下:

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] 定义字段中的语法错误。

通过在网上搜索,我发现问题出在最后一个字段的 DECIMAL 类型上,当我从查询中删除它时,它会创建表。

我还尝试更改 Access 中的一个选项以使数据库与 ANSI 92 兼容,当我这样做时,可以从 Access 内部创建表。

因为这个过程必须在数百个数据库中完成,所以我想在 python 循环中执行此操作,但要做到这一点,必须从上面的代码中创建数据库和表。

我在语法中遗漏了什么吗?有谁知道这是否是模块的问题?

4

1 回答 1

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()
于 2016-06-21T12:49:48.503 回答