我有两个表(比如Student
和College
),还有第三个表,它有student_id
和college_id
外键。你知道吗
我不想硬删除Student
和College
行,因此在这两个表中都包含了deleted(Boolean)
列。你知道吗
我想将一个学生添加到学院(通过将student_id
和college_id
添加到第三个表)。我首先要检查该学生是否已经存在于学院中,同时还要过滤已删除的学生和学院记录。你知道吗
我写的第一部分是:
db.session.query(StudentCollegeMappingModel).filter(
StudentCollegeMappingModel.student_id==student_id,
StudentCollegeMappingModel.college_id==college_id
).first()
但我也想看看
Student.deleted==False and College.deleted==False
我该怎么做?你知道吗
可以使用连接
您需要将
Student
和College
表连接到查询中,以便对deleted
列进行筛选:我使用了
StudentCollegeMappingModel.query
而不是db.session.query(StudentCollegeMappingModel)
;它们产生相同的初始Query
实例,但是SQLAlchemy通过给你.query
属性来让你更容易。你知道吗如果您将
student_id
和college_id
配置为ForeignKey()
列,并且表之间没有其他可能混淆SQLAlchemy的关系,那么您可能可以省略这里的Student.id == StudentCollegeMappingModel.student_id
和College.id == StudentCollegeMappingModel.college_id
ON
子句:也可以使用^{} with ^{} :
请注意,在插入新记录时,可以将上述查询用作
NOT EXISTS
筛选器;这将有助于防止争用条件(多段代码尝试进行相同的更改,或者一些代码在测试后但在插入之前设置deleted
列)。你知道吗相关问题 更多 >
编程相关推荐