SQLAlchemy-reflect로 얻은 테이블을 쿼리 할 때 'Table'개체에 '_query_cls'속성이 없습니다.

Aug 21 2020

사용하여 연결 한 SQL Alchemy ORM으로 테이블을 쿼리하려고합니다 reflect(기존 데이터베이스 임). 여기에 설명 된 방법을 사용하려고했습니다 : How to query a table, in sqlalchemy to query the data but I got an error.

from sqlalchemy import create_engine, MetaData
from sqlalchemy.orm import Session

engine = create_engine(db_uri)
metadata = MetaData(engine)
metadata.reflect()
table = metadata.tables["events"]
Session.query(table).all()

다음과 같은 오류가 발생합니다.

Traceback (most recent call last):
  File "/home/nicolas/anaconda3/envs/chatbot_analytics/lib/python3.8/site-packages/IPython/core/interactiveshell.py", line 3343, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-25-bed7e1c6ef62>", line 1, in <module>
    Session.query(tu).first()
  File "/home/nicolas/anaconda3/envs/chatbot_analytics/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1584, in query
    return self._query_cls(entities, self, **kwargs)
AttributeError: 'Table' object has no attribute '_query_cls'

나는 버전을 사용 SQLAlchemy==1.3.19합니다. PostgreSQL 데이터베이스를 사용합니다.

이와 같은 테이블을 얻을 때 ORM으로 데이터를 쿼리 할 수 ​​있습니까?

답변

2 IljaEverilä Aug 21 2020 at 16:52

Session.query(table)

Session인스턴스 가 아닌 클래스 이기 때문에 인스턴스 의 메서드를 호출하지 않고 Table개체를 self인수 로 전달합니다 Session. 사전 구성된 세션을 만드는 일반적인 방법은 사용하는 것입니다 sessionmaker의 맞춤형 버전을 만들 Session인스턴스화 다음 클래스를, 그리고 :

from sqlalchemy import create_engine, MetaData
from sqlalchemy.orm import sessionmaker

engine = create_engine(db_uri)
metadata = MetaData(engine)
metadata.reflect()
table = metadata.tables["events"]
Session = sessionmaker(bind=engine)
session = Session()
session.query(table).all()