Sqlalchemy 中count函数的坑
来源:互联网 发布:成立子公司的好处知乎 编辑:程序博客网 时间:2024/05/17 22:44
最近项目中用了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 <rest of query follows...>) 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=<cmdb_port_scan>, primary_key=True, nullable=False),))
这里我们将查询改为filter_obj.with_entities(func.count(pk)).scalar()即可
- Sqlalchemy 中count函数的坑
- Sqlalchemy中Func的使用
- cvCreateTrackbar函数中count的最大值
- sql中Count函数的用法
- MySQL中count()函数的使用
- Oracle中count()函数
- Oracle中count函数
- PHP中count函数
- sql中count函数和distinct函数的配合使用
- Sqlalchemy中Unique Key引起的问题
- Web.py中Sqlalchemy scoped_session的使用
- SQLAlchemy中设置Column的默认值
- sqlalchemy中hive的url形式
- sqlalchemy中多对多的关系
- Flask中SqlAlchemy的读写分离配置
- SQLAlchemy中ResultProxy的正确使用
- count(*)函数的使用
- count函数的使用
- 静态顺序表-c语言实现
- 写高质量OC代码52建议总结:51.load和initialize
- 执行环境及作用域以及内存问题
- 持久层
- EL表达式中的empty和null
- Sqlalchemy 中count函数的坑
- redis/memcached可视化客户端工具TreeNMS
- 洛谷 P1236 算24点
- net.sf.json.JSONObject maven
- Mac系统eclipse(4.7)安装JAD插件
- 欢迎使用CSDN-markdown编辑器
- JQuery的父、子、兄弟节点查找方法
- 关于用IDEA的两个坑。赶快写下来跟遇到类似问题的同学提供点帮助
- Java数组-二分查找原理