gpt4 book ai didi

python - pyodbc - 从 MS Access (MDB) 数据库读取主键

转载 作者:搜寻专家 更新时间:2023-10-30 20:04:04 27 4
gpt4 key购买 nike

当我尝试使用 cursor.primaryKeys("tablename") 时发生异常:

错误:('IM001','[IM001] [Microsoft][ODBC 驱动程序管理器] 驱动程序不支持此功能 (0) (SQLPrimaryKeys)')

list(cursor.columns(table='tablename')) 也不显示主键。

最佳答案

对于 Access ODBC,我们通常可以* 通过 .statistics() 获取主键列pyodbc cursor 对象的方法:

crsr = conn.cursor()
table_name = 'MyTable'
# dict comprehension: {ordinal_position: col_name}
pk_cols = {row[7]: row[8] for row in crsr.statistics(table_name) if row[5]=='PrimaryKey'}
print(pk_cols) # e.g., {1: 'InvID', 2: 'LineItem'}

*编辑:此方法假定表的主键索引名为 PrimaryKey。如果表是使用 MS Access 表生成器 (GUI) 创建的,则为真,但如果表是使用 DDL(即 CREATE TABLE …)创建的,则为真。在这些情况下,主键索引的名称将类似于 Index_EA5344E1_0942_445C,因此上述方法不起作用,但我们可以改用 ACE DAO:

import win32com.client  # needs `pip install pywin32`


def get_access_primary_key_columns(db_path, table_name):
db_engine = win32com.client.Dispatch("DAO.DBEngine.120")
db = db_engine.OpenDatabase(db_path)
tbd = db.TableDefs(table_name)
for idx in tbd.Indexes:
if idx.Primary:
return [fld.Name for fld in idx.Fields]


if __name__ == "__main__":
print(
get_access_primary_key_columns(
r"C:\Users\Public\Database1.accdb", "team"
)
)
# ['city', 'prov']

关于python - pyodbc - 从 MS Access (MDB) 数据库读取主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37712307/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com