gpt4 book ai didi

python - 如何有可能在 Flask Python 中用 2 个表调用 db.session.query 中的列名?

转载 作者:行者123 更新时间:2023-12-05 03:47:15 31 4
gpt4 key购买 nike

我正在使用 Flask、Python、SQLAlchemy 和 Mysql 开发 Web 应用程序。

我有 2 个表:

TaskUser:
- id
- id_task (foreign key of id column of table Task)
- message


Task
- id
- id_type_task

我需要提取所有任务用户(来自 TaskUser),其中 id_task 在特定的任务 ID 列表中。比如id_task在(1,2,3,4,5)中的所有taskusers

一旦我得到结果,我就会做一些事情并使用一些条件。

当我提出这个请求时:

all_tasksuser=TaskUser.query.filter(TaskUser.id_task==Task.id)  \
.filter(TaskUser.id_task.in_(list_all_tasks),Task.id_type_task).all()

for item in all_tasksuser:
item.message="something"
if item.id_type_task == 2:
#do some stuff
if item.id_task == 7 or item.id_task == 7:
#do some stuff

我得到这个输出错误:

if item.id_type_task == 2:
AttributeError: 'TaskUser' object has no attribute 'id_type_task'

这很正常,因为我的 SQLAlchemy 请求只调用了一张表。我无法访问表任务的列。

但我可以通过名称调用 TaskUser 的列(请参阅 item.id_task)。

所以我将 SQLAlchemy 更改为:

all_tasksuser=db_mysql.session.query(TaskUser,Task.id,Task.id_type_task).filter(TaskUser.id_task==Task.id)  \
.filter(TaskUser.id_task.in_(list_all_tasks),Task.id_type_task).all()

这次我在查询中包含了表 Task 但我不能按名称调用列。我应该使用列的[索引]。我收到这种错误消息:

AttributeError: 'result' object has no attribute 'message'

问题是我在两个表上都有更多的列(大约 40 个)。处理具有列索引号的数据太复杂了。

我需要一个包含来自 2 个不同表的数据的行列表,并且我需要能够在循环中按列名调用数据。

你觉得可能吗?

最佳答案

导致混淆的关键点是,当您对映射类(如 TaskUser)执行查询时,sqlalchemy 将返回该类的实例。例如:

q1 = TaskUser.query.filter(...).all()  # returns a list of [TaskUser]
q2 = db_mysql.session.query(TaskUser).filter(...).all() # ditto

但是,如果您只指定特定的列,您将只收到一个(特殊的)元组列表:

q3 = db_mysql.session.query(TaskUser.col1, TaskUser.col2, ...)...

如果您将思维方式转变为完全使用 ORM 范式,您将主要使用对象。在您的特定示例中,假设您在模型上定义了关系,工作流程可能类似于以下内容:

# model
class Task(...):
id = ...
id_type_task = ...


class TaskUser(...):
id = ...
id_task = Column(ForeignKey(Task.id))
message = ...

task = relationship(Task, backref="task_users")

# query
all_tasksuser = TaskUser.query ...

# work
for item in all_tasksuser:
item.message = "something"
if item.task.id_type_task == 2: # <- CHANGED to navigate the relationship ...
#do some stuff
if item.task.id_task == 7 or item.task.id_task == 7: # <- CHANGED
#do some stuff

关于python - 如何有可能在 Flask Python 中用 2 个表调用 db.session.query 中的列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64907471/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com