我使用pyodbc对.mbd(访问)文件中的大型数据库进行数据挖掘。
我想创建一个新表,从多个现有表中获取相关信息(然后将其提供给工具)。
我想我知道我需要传输数据,我知道如何创建一个给定列名和数据类型的表,但是我在获取数据类型时遇到了问题(INTEGER,VARCHAR等等)。 )现有表格中相应列的列表。我需要这些类型来兼容地创建新列。
我在互联网上找到的内容(如this和this)让我陷入无效命令的麻烦,所以我认为这是一个特定于平台的问题。再说一遍,我在数据库上相当绿色。
有人知道如何获取这些字段的类型吗?
答案 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 :(得分: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