python - SQL ALCHEMY - 如何返回 query(model).all() 作为值元组而不是模型实例
问题描述
我正在为我的项目使用 SQL Alchemy,但我很难找出如何简单地查询模型并返回元组列表作为结果。
我有一个简单的模型:
class Security(Base):
__tablename__ = 'Securities'
id = Column(Integer, primary_key=True, autoincrement=True)
ticker = Column(String, index= True)
company = Column(String)
sector = Column(String)
industry = Column(String)
country = Column(String)
当我在会话中查询此模型时,我得到一个模型作为回报:
s = Session()
q = s.query(Security).all()
如果我只是打印查询,我会得到一个模型类的列表。
[<models.Security at 0x7ff6eaf75a90>,
<models.Security at 0x7ff6eaf759a0>,
<models.Security at 0x7ff6eaf75940>,
<models.Security at 0x7ff6eaf758e0>,
<models.Security at 0x7ff6eaf75040>,
<models.Security at 0x7ff6eaf750a0>,
<models.Security at 0x7ff6eaf75100>,
<models.Security at 0x7ff6eaf75070>,
<models.Security at 0x7ff6eaf751c0>,..
所以我现在找到了一个解决方案:
[(i.id, i.ticker, i.company, i. sector, i.industry, i.country) for i in q]
有没有更蟒蛇的方式来做到这一点?当我使用 mysql--connector-python (或 pymysql,记不得了)查询我的数据库时,结果将直接打印为元组列表。
解决方案
如果你想获取元组而不是模型实例,你可以查询底层的Table对象而不是模型类,例如
# 1.x style
rows = session.query(Security.__table__).all()
# 2.0 style
rows = session.execute(sa.select(Security.__table__)).all()
请注意,这些方法可能不适用于关系。
如果应用程序被设计为只处理原始元组,那么使用 SQLAlchemy 的 ORM 层就没有什么意义了——使用核心层代替你可以Table
直接处理对象的地方。
推荐阅读
- spring-batch - Spring Batch Job 停止使用 jobOperator
- apache-spark - YARN Fair-Scheduler 不会将作业置于待处理状态
- google-apps-script - 如何根据条件将单元格值复制到另一个工作表(Apps Script)
- dart - 有效地测试/匹配嵌套对象
- node.js - 如何使用nodejs和mongoose更新/设置变量carryForward,它是对象内部的对象再次嵌套数组?
- angular - 本地化 Angular 11 库
- c++ - 将 Azure Kinect 库链接到 ROS2 工作区
- javascript - 如何将 React 应用程序与纯 JavaScript 应用程序集成?
- python - 如何在 VSCode 中使用远程 Jupyter 服务器?
- regex - 正则表达式不匹配