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

时间:2010-12-27 14:12:08

标签: python sql ms-access pyodbc

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

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

我想我知道我需要传输数据,我知道如何创建一个给定列名和数据类型的表,但是我在获取数据类型时遇到了问题(INTEGER,VARCHAR等等)。 )现有表格中相应列的列表。我需要这些类型来兼容地创建新列。

我在互联网上找到的内容(如thisthis)让我陷入无效命令的麻烦,所以我认为这是一个特定于平台的问题。再说一遍,我在数据库上相当绿色。

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

2 个答案:

答案 0 :(得分:5)

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

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

根据this answer PyODBC通过游标方法公开

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

正如Mark在评论中指出的那样,你可能也想要row.data_type。他提供的link包含了它提供的所有列

  1. TABLE_CAT
  2. TABLE_SCHEM
  3. 表名
  4. 列名
  5. DATA_TYPE
  6. TYPE_NAME
  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. ORDINAL_POSITION
  18. is_nullable:SQL_NULLABLE之一,SQL_NO_NULLS,SQL_NULLS_UNKNOWN。

答案 1 :(得分:2)

我对pyodbc并不熟悉,但我过去在VBA中做过这个。

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

以下是我在VBA中使用Excel 2010的示例,其中我连接到Access数据库(2000 mdb格式)并列出表,字段及其数据类型(作为枚举,例如'4'表示dbLong) 。您可以在输出中看到系统表,在底部可以看到用户创建的表。 您可以在互联网上轻松找到如何使用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