1

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

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

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

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

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

4

2 回答 2

8

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

但是 ODBC 确实支持通过ODBC.SQLColumns 函数通过其连接来获取架构。

根据这个答案, PyODBC 通过游标方法公开了这一点

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

正如马克在评论中指出的那样,您可能还需要 row.data_type。他提供的链接包括它提供的所有列

  1. 表猫
  2. table_schem
  3. 表名
  4. 列名
  5. 数据类型
  6. 类型名称
  7. 列大小
  8. 缓冲区长度
  9. 十进制数字
  10. num_prec_radix
  11. 可为空的
  12. 评论
  13. 列定义
  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 之一。
于 2010-12-27T15:41:24.627 回答
2

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

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

这是我在 Excel 2010 的 VBA 中所做的一个示例,我在其中连接到 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
于 2010-12-27T15:36:38.687 回答