如何使用 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 中的查询
无法使用 pyodbc 在 Access 数据库的表中插入/更新长文本字段