python怎样实现多表连接查询_sqlalchemy:如何通过一个查询连接多个表?

正如@letitbee所说,将主键分配给表并正确定义关系以允许正确的ORM查询是最佳实践。有人说。。。

如果您有兴趣按照以下行编写查询:SELECT

user.email,

user.name,

document.name,

documents_permissions.readAllowed,

documents_permissions.writeAllowed

FROM

user, document, documents_permissions

WHERE

user.email = "user@email.com";

那么你应该去做一些事情,比如:session.query(

User,

Document,

DocumentsPermissions

).filter(

User.email == Document.author

).filter(

Document.name == DocumentsPermissions.document

).filter(

User.email == "user@email.com"

).all()

如果相反,您希望执行以下操作:SELECT 'all the columns'

FROM user

JOIN document ON document.author_id = user.id AND document.author == User.email

JOIN document_permissions ON document_permissions.document_id = document.id AND document_permissions.document = document.name

那么你应该按照以下思路来做:session.query(

User

).join(

Document

).join(

DocumentsPermissions

).filter(

User.email == "user@email.com"

).all()

关于那件事的一个说明。。。query.join(Address, User.id==Address.user_id) # explicit condition

query.join(User.addresses) # specify relationship from left to right

query.join(Address, User.addresses) # same, with explicit target

query.join('addresses') # same, using a string

有关详细信息,请访问docs。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值