SQLAlchemy AutoMap反射MS Access数据库出现AttributeError,表已定义主键
问题根因
报错日志中的SAWarning已经明确了核心问题:Access ODBC驱动不支持ODBC标准的SQLPrimaryKeys接口,哪怕你在Access本地已经为ref_personen表设置了主键,SQLAlchemy的反射逻辑也无法识别到主键信息。而SQLAlchemy Automap扩展默认只会为识别到主键的表自动生成ORM映射类,因此Base.classes中不存在ref_personen对应的属性,最终抛出AttributeError。
解决方案
你只需要手动为需要映射的表指定主键字段,其余字段仍可自动反射获取,无需手动声明全量字段:
from sqlalchemy import Table, Column, Integer from sqlalchemy.ext.automap import automap_base Base = automap_base() # 请替换下面代码中的主键字段名、字段类型为你表中实际的主键配置 personen_table = Table( 'ref_personen', Base.metadata, Column('你的主键字段名', Integer, primary_key=True), # 示例:如果主键是名为id的整数字段就填这行 autoload_with=engine ) # 执行prepare生成映射类 Base.prepare() # 现在就可以正常获取映射类了 Personen = Base.classes.ref_personen session = Session(engine)
额外排查建议
如果调整后仍然报错,可以执行以下代码确认反射到的所有表名,排查是否存在表名拼写、大小写转换问题:
print(Base.classes.keys())
内容的提问来源于stack exchange,提问作者linus
相关产品推荐
相关产品推荐

