Python SQLAlchemy-';表';对象没有属性'_查询cls';查询使用reflect获取的表时

Python SQLAlchemy-';表';对象没有属性'_查询cls';查询使用reflect获取的表时,python,sqlalchemy,Python,Sqlalchemy,我正在尝试使用SQL Alchemy ORM查询一个表,我使用reflect(它是一个现有的数据库)连接了该表。我尝试使用这里描述的方法:查询数据,但我得到了一个错误 from sqlalchemy import create_engine, MetaData from sqlalchemy.orm import Session engine = create_engine(db_uri) metadata = MetaData(engine) metadata.reflect() table

我正在尝试使用SQL Alchemy ORM查询一个表,我使用
reflect
(它是一个现有的数据库)连接了该表。我尝试使用这里描述的方法:查询数据,但我得到了一个错误

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'
回溯(最近一次呼叫最后一次):
文件“/home/nicolas/anaconda3/envs/chatbot_analytics/lib/python3.8/site packages/IPython/core/interactiveshell.py”,第3343行,运行代码
exec(代码对象、self.user\u全局、self.user\n)
文件“”,第1行,在
Session.query(tu.first)()
文件“/home/nicolas/anaconda3/envs/chatbot_analytics/lib/python3.8/site packages/sqlalchemy/orm/session.py”,第1584行,在查询中
返回self.\u查询\u cls(实体、self、**kwargs)
AttributeError:“表”对象没有属性“\u query\u cls”
我使用版本
SQLAlchemy==1.3.19
。我使用PostgreSQL数据库

在获取这样的表时,是否可以使用ORM查询数据?

In

Session.query(table)
您没有调用
会话
实例的方法,而是将
对象作为
self
参数传递,因为
会话
是类,而不是实例。要使用创建定制版本的
会话
类,然后对其进行实例化:

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()

您忘记在
Session.query(tu)
中实例化
Session
,因此将
对象作为
self
传递给
Session.query()
。相关:@IljaEverilä谢谢!就这样。问题中的代码实际上是正确的,而不是我代码中的代码。。!你能不能编辑一下,把提供回溯的实际代码包括进去?换句话说a,所以这将成为一个很好的目标,以解决类似的问题(过去和未来),例如。重要的是要包含
会话
的定义,以便明确它是类,而不是范围会话。@IljaEverilä刚刚用导入编辑了我的问题,以及代码在我的代码中是如何存在的。请随时发布答案和您的解决方案