我可以使用 Python 从空的 Access 表中提取架构信息吗?

Posted

技术标签:

【中文标题】我可以使用 Python 从空的 Access 表中提取架构信息吗?【英文标题】:Can I extract schema information from empty Access tables with Python? 【发布时间】:2016-05-30 07:56:31 【问题描述】:

我正在尝试从 Microsoft Access 数据库中提取架构,作为合并约 300 个数据库的大型项目的一部分。使用我当前的代码,我只能获取表名,而不是字段名。

我一直在使用这个 win32com 代码 sn-p,但我愿意接受其他建议 (http://code.activestate.com/recipes/528868-extraction-and-manipulation-class-for-microsoft-ac/?in=user-4074475)

db = AccessDb('''c:\x.mdb''')
tbls = db.getTables()
for tbl in tbls:
    fields = tbl.getFields()
    for field in fields:
        print '%s - %s' %(tbl,field)

【问题讨论】:

不应该是print '%s - %s' %(tbl.Name, field.Name)之类的吗? @marlan - 这就是我所期待的,但 tbl.getFields() 没有返回任何东西 - 可能是因为我不知道如何正确应用它。 【参考方案1】:

使用 pyodbc 中的 cursor.tables()cursor.columns() 方法将显示您寻找的信息,即使对于空表也是如此。例如

# -*- coding: utf-8 -*-
import pyodbc
connStr = (
    r"Driver=Microsoft Access Driver (*.mdb, *.accdb);"
    r"DBQ=C:\Users\Gord\Desktop\Test.accdb;"
    )
conn = pyodbc.connect(connStr)
crsr = conn.cursor()
table_list = [x[2] for x in crsr.tables() if x[3]=='TABLE']
for table_name in table_list:
    column_list = [x[3] for x in crsr.columns(table_name)]
    for column_name in column_list:
        print('[0].[1]'.format(table_name, column_name))
crsr.close()
conn.close()

有关详细信息,请参阅 pyodbc cursor 文档。

【讨论】:

以上是关于我可以使用 Python 从空的 Access 表中提取架构信息吗?的主要内容,如果未能解决你的问题,请参考以下文章

应用程序中的错误:org.hibernate.id.IdentifierGenerationException:试图从空的一对一属性分配 id

Python Django:从空模型字段获取无值

从空列返回实体后出现空指针异常

Terraform 从空状态刷新?

ODBC 链接表将 Tinyint 字段转换为是/否

我可以在 Python 的 Access 数据库中同时使用本地和 ODBC 链接表吗?