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

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

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

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

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

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

【问题讨论】:

    标签: python sql ms-access pyodbc


    【解决方案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 包含了它提供的所有列

    1. table_cat
    2. table_schem
    3. 表名
    4. 列名
    5. data_type
    6. 类型名称
    7. column_size
    8. buffer_length
    9. decimal_digits
    10. num_prec_radix
    11. 可为空
    12. 备注
    13. column_def
    14. sql_data_type
    15. sql_datetime_sub
    16. char_octet_length
    17. 序数位置
    18. is_nullable:SQL_NULLABLE、SQL_NO_NULLS、SQL_NULLS_UNKNOWN 之一。

    【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-04
      • 2020-03-29
      • 2013-09-04
      • 1970-01-01
      • 2016-03-17
      • 2021-04-25
      • 2020-08-29
      • 1970-01-01
      相关资源
      最近更新 更多