如何在 Sqlalchemy 中使用 automap_base 处理 AttributeError(key)?

And*_*ujo 3 python orm sqlalchemy

请帮助如何解决此错误 - AttributeError(key):

  File "pivot_table_measurements.py", line 1, in <module>
    from database import *
  File "/home/dedeco/Projetos/bigclima-project/database.py", line 24, in <module>
    MeasureRanges = Base.classes.measure_ranges
  File "/home/dedeco/craw/lib/python3.5/site-packages/sqlalchemy/util/_collections.py", line 212, in __getattr__
    raise AttributeError(key)
AttributeError: measure_ranges
Run Code Online (Sandbox Code Playgroud)

数据库.py:

from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session
from sqlalchemy import create_engine
from sqlalchemy.orm.exc import MultipleResultsFound, NoResultFound
import string
from decimal import Decimal

ECHO = False
AUTOFLUSH = False

Base = automap_base()

engine = create_engine('postgresql://user:pass@localhost:5432/clima', echo=ECHO)

Base.prepare(engine, reflect=True)

Country = Base.classes.countries
State = Base.classes.states
City = Base.classes.cities
Measurement = Base.classes.measurements
MeasurementHourly = Base.classes.measurements_hourly
MeasureRanges = Base.classes.measure_ranges
Parameter = Base.classes.parameters
WeatherStation = Base.classes.weather_stations

session = Session(engine, autoflush=AUTOFLUSH)
Run Code Online (Sandbox Code Playgroud)

表measure_ranges 存在于数据库中,但我不知道为什么会收到此错误。当我删除这一行(MeasureRanges = Base.classes.measure_ranges)时,我相信该错误与此表中的某些问题有关。

And*_*ujo 10

我决定分享这个问题和答案,因为这是一个基本的事情,但很难找到解决方案。

发生问题的原因是我没有在此表上创建主键,并且无法自动映射到类。

请参阅文档:

所谓可行,是指对于要映射的表,它必须指定主键。此外,如果该表被检测为两个其他表之间的纯关联表,则不会直接映射该表,而是将其配置为两个引用表的映射之间的多对多表。

在此处查看更多详细信息:SQLAlchemy 1.2 文档 - Autoamp