![](/img/trans.png)
[英]How to suppress warnings on cross join select without where clause in sqlalchemy?
[英]How to add a where clause to a sqlalchemy join?
我正在尋找一個查詢,例如:
SELECT DISTINCT entity_rel.eidsub AS eidsub, entity_user_client.eidclient AS eidclient
FROM entity_user_client
LEFT OUTER JOIN entity_rel ON entity_user_client.eidclient = entity_rel.eidobj AND entity_rel.reltype = :reltype_1
LEFT OUTER JOIN entity_client ON entity_user_client.eidclient = entity_client.entityid
WHERE entity_user_client.eiduser IN (:userid_1)
使用以下代碼:
euc_query = select(
[EntityRel.c.eidsub, EntityUserClient.c.eidclient]
).distinct().select_from(
EntityUserClient
).outerjoin(
EntityRel,
(EntityUserClient.c.eidclient == EntityRel.c.eidobj) & (
EntityRel.c.reltype == 51)
).outerjoin(
EntityClient,
EntityUserClient.c.eidclient == EntityClient.c.entityid
)
if user_ids: # filter by user
euc_query = euc_query.where(EntityUserClient.c.eiduser.in_(user_ids))
但它給出了錯誤:
AttributeError:“加入”對象沒有屬性“哪里”
此外,select周圍還包裹着一個寄生:
(SELECT DISTINCT entity_rel.eidsub AS eidsub, entity_user_client.eidclient AS eidclient
FROM entity_user_client)
LEFT ...
不應該在那里,我不知道如何擺脫:(
連接應該與EntityUserClient
,並由select_from()
包含:例如:
user_ids = (1, 2, 3, 4, 5)
euc_query = select(
[EntityRel.c.eidsub, EntityUserClient.c.eidclient]
).distinct().select_from(
EntityUserClient.outerjoin(
EntityRel,
(EntityUserClient.c.eidclient == EntityRel.c.eidobj) & (
EntityRel.c.reltype == 51)
).outerjoin(
EntityClient,
EntityUserClient.c.eidclient == EntityClient.c.entityid
)
)
if user_ids: # filter by user
euc_query = euc_query.where(EntityUserClient.c.eiduser.in_(user_ids))
print(euc_query)
生產:
SELECT DISTINCT entity_rel.eidsub, entity_user_client.eidclient
FROM entity_user_client LEFT OUTER JOIN entity_rel ON entity_user_client.eidclient = entity_rel.eidobj AND entity_rel.reltype = :reltype_1 LEFT OUTER JOIN entity_client ON entity_user_client.eidclient = entity_client.entityid
WHERE entity_user_client.eiduser IN (:eiduser_1, :eiduser_2, :eiduser_3, :eiduser_4, :eiduser_5)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.