如何使用 pyodbc 获取 Access 数据库特定字段的数据类型?

Posted

技术标签:

【中文标题】如何使用 pyodbc 获取 Access 数据库特定字段的数据类型?【英文标题】:How to get datatypes of specific fields of an Access database using pyodbc? 【发布时间】:2010-12-27 14:12:07 【问题描述】:

我正在使用 pyodbc 对 .mbd(访问)文件中的大型数据库进行数据挖掘。

我想创建一个新表,从几个现有表中获取相关信息(然后将其提供给工具)。

我想我知道传输数据所需的一切,并且我知道如何根据列名和数据类型创建表,但是 我无法获取数据类型(INTEGER、VARCHAR 等)现有表中的相应列。我需要这些类型来兼容地创建新列。

我在互联网上发现的(如this 和this)让我陷入了无效命令的麻烦,所以我认为这是一个特定于平台的问题。再说一次,我对数据库相当熟悉。

有人知道如何获取这些字段的类型吗?

【问题讨论】:

【参考方案1】:

这些文章对您没有帮助的原因是因为它们是针对 SQL Server 的。 SQL Server 具有可以查询以获取列数据的系统表,而 MS Access 没有。 MS Access 只允许您查询对象名称。

但是 ODBC 确实支持通过 ODBC.SQLColumns functions 的连接获取架构。

根据this answerPyODBC 通过游标方法公开这个

# columns in table x
for row in cursor.columns(table='x'):
    print row.column_name 

正如 Mark 在 cmets 中所指出的,您可能还需要 row.data_type。他提供的link 包含了它提供的所有列

    table_cat table_schem 表名 列名 data_type 类型名称 column_size buffer_length decimal_digits num_prec_radix 可为空 备注 column_def sql_data_type sql_datetime_sub char_octet_length 序数位置 is_nullable:SQL_NULLABLE、SQL_NO_NULLS、SQL_NULLS_UNKNOWN 之一。

【讨论】:

要获取列的数据类型,请查看 row.data_type 而不是 row.column_name。有关所有列属性,请参见此处:code.google.com/p/pyodbc/wiki/Cursor【参考方案2】:

我不熟悉pyodbc,但我过去在VBA中做过。

您提到的 2 个链接适用于 SQL Server,而不适用于 Access。要找出 Access 表中每个字段的数据类型,可以使用 DAO 或 ADOX。

这是我在 VBA 中使用 Excel 2010 做的一个示例,我在其中连接到 Access 数据库(2000 mdb 格式)并列出表、字段及其数据类型(作为枚举,例如“4”表示 dbLong) .您可以在输出中看到系统表,并在底部看到用户创建的表。 您可以在 Internet 上轻松找到有关如何使用 ADOX 执行类似操作的示例。我希望这会有所帮助。

Private Sub TableDefDao()
    Dim db As DAO.Database
    Set db = DAO.OpenDatabase("C:\Database.mdb")

    Dim t As DAO.TableDef
    Dim f As DAO.Field
    For Each t In db.TableDefs
        Debug.Print t.Name
        For Each f In t.Fields
            Debug.Print vbTab & f.Name & vbTab & f.Type
        Next
    Next
End Sub

【讨论】:

以上是关于如何使用 pyodbc 获取 Access 数据库特定字段的数据类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 pyodbc 连接到 Access (.mdb) 数据库文件

如何使用 pyodbc 执行保存在 MS Access 中的查询

使用 Python/pyodbc 插入 Access DB

无法使用 pyodbc 在 Access 数据库的表中插入/更新长文本字段

尝试使用pyodbc将python连接到Access数据库时出错[重复]

使用 Access 和 pyodbc 的 INSERT 语句中的语法错误