我正在使用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循环中执行此操作,但为了实现这一点,必须从上面的代码中创建数据库和表。
我在语法中遗漏了什么? 有谁知道这是否是模块的问题?
答案 0 :(得分:2)
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()