1. 让指定字段按照给定的值进行排序
```
temp_query= db.session.query(TemplateBuild).filter(
TemplateBuild.deploy_id== deploy_id,
TemplateBuild.env.in_(envs),
TemplateBuild.delete== 0
).order_by(case(value=TemplateBuild.env, whens={'prod': 1, 'staging': 2, 'test': 3, 'dev': 4}))
# 多不同字段排序
# order_by(case(
# (
# (TemplateDeploy.name == 'prod', 1),
# (TemplateDeploy.env == 'staging', 2),
# (TemplateDeploy.compiled == 'Server', 3)
# ))
# )
```
原文链接:https://blog.csdn.net/u010311062/article/details/76268783
最近项目中用了Sqlalchemy orm,开始数据不多的时候用coun()函数不会慢,但是当数据到百万级的时候,filter_obj.count()来获取数据总数,就明显感觉慢了。
看官方API的描述:
count ( )
Return a count of rows this Query would return.
This generates the SQL for this Query as follows:
SELECT count(1) AS count_1 FROM (
SELECT
) AS anon_1
这里会临时建一个表把数据查询出来然后在count
我在数据库中对这种count的计时比较:
那么我们如何解决这个问题呢。
我们可以利用func.count来处理统计总数的
这里要用到Sqlalchemy的函数with_entities来重置查询
意思就是我们可以这样做
filter_obj = session.quert(User).filter(User.id>23)
data = filter_obj[0:10]
total = filter_obj.with_entities(func.count(User.id)).scalar()
然而还有一个问题。我这里已经将查询封装在框架里面了。我并不能保证每个model的主键都是id
所以,这里要获取到传进来的model的主键
from sqlalchemy import inspect
ins = inspect(self.model)
pk = ins.primary_key[0]
primary_key返回的是一个元组,我们这里支取第一个,此时pk返回的是Column类型,('Tuple of primary keys: ', (Column('id', Integer(), table=
这里我们将查询改为filter_obj.with_entities(func.count(pk)).scalar()即可
————————————————
版权声明:本文为CSDN博主「moses涛」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010311062/article/details/76268783