gpt4 book ai didi

python - 使用 Access ODBC 创建包含 DECIMAL 列的表

转载 作者:行者123 更新时间:2023-12-01 03:52:59 25 4
gpt4 key购买 nike

我正在使用 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] Syntax error in defining field.

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

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

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

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

最佳答案

Access ODBC 驱动程序中的 DDL 处理存在许多缺陷,不幸的是您遇到了其中之一。如果您想创建一个包含 DECIMAL 列的表,您将需要使用 pywin32 中的 adodbapi (版本 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()

关于python - 使用 Access ODBC 创建包含 DECIMAL 列的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37943237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com