我有一个模型:
class Trades(models.Model):
userid = models.PositiveIntegerField(null=True, db_index=True)
positionid = models.PositiveIntegerField(db_index=True)
tradeid = models.PositiveIntegerField(db_index=True)
orderid = models.PositiveIntegerField(db_index=True)
...
Run Code Online (Sandbox Code Playgroud)
我想执行下一个查询:
select *
from trades t1
inner join trades t2
ON t2.tradeid = t1.positionid and t1.tradeid = t2.positionid
Run Code Online (Sandbox Code Playgroud)
使用Django ORM可以做到没有黑客的攻击吗?谢谢!
select * ... 需要更多的工作。如果您可以从右侧修剪您想要的列
table=SomeModel._meta.db_table
join_column_1=SomeModel._meta.get_field('field1').column
join_column_2=SomeModel._meta.get_field('field2').column
join_queryset=SomeModel.objects.filter()
# Force evaluation of query
querystr=join_queryset.query.__str__()
# Add promote=True and nullable=True for left outer join
rh_alias=join_queryset.query.join((table,table,join_column_1,join_column_2))
# Add the second conditional and columns
join_queryset=join_queryset.extra(select=dict(rhs_col1='%s.%s' % (rhs,join_column_2)),
where=['%s.%s = %s.%s' % (table,join_column_2,rh_alias,join_column_1)])
Run Code Online (Sandbox Code Playgroud)
添加其他列以供选择 dict 使用。
附加约束放在 ON() 之后的 WHERE 中,您的 SQL 引擎可能对其优化不佳。
| 归档时间: |
|
| 查看次数: |
4156 次 |
| 最近记录: |