使用 Access ODBC 创建带有 DECIMAL 列的表
Posted
技术标签:
【中文标题】使用 Access ODBC 创建带有 DECIMAL 列的表【英文标题】:CREATE TABLE with DECIMAL column using Access ODBC 【发布时间】:2016-06-21 11:30:25 【问题描述】:我正在使用 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 循环中执行此操作,但要做到这一点,必须从上面的代码中完成数据库和表的创建。
我在语法中遗漏了什么吗? 有谁知道这是否是模块的问题?
【问题讨论】:
【参考方案1】:Access ODBC 驱动程序中的 DDL 处理存在许多缺陷,不幸的是您遇到了其中一个。如果您想创建一个包含 DECIMAL 列的表,您需要使用来自 pywin32(版本 211 或更高版本)的 adodbapi
和 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()
【讨论】:
以上是关于使用 Access ODBC 创建带有 DECIMAL 列的表的主要内容,如果未能解决你的问题,请参考以下文章
受限数据类型属性冲突 - 带有 Access 数据库的 ODBC
如何通过 ODBC 查询名称带有问号的 MS Access 列?
如何强制 Access 更改无 DSN 的 ODBC 连接的用户名和密码?