Getting COUNT from sqlalchemy

拟墨画扇 提交于 2020-12-20 08:08:11

问题


I have:

res = db.engine.execute('select count(id) from sometable')

The returned object is sqlalchemy.engine.result.ResultProxy.

How do I get count value from res?

Res is not accessed by index but I have figured this out as:

count=None
for i in res:
    count = res[0]
    break

There must be an easier way right? What is it? I didn't discover it yet. Note: The db is a postgres db.


回答1:


While the other answers work, SQLAlchemy provides a shortcut for scalar queries as ResultProxy.scalar():

count = db.engine.execute('select count(id) from sometable').scalar()

scalar() fetches the first column of the first row and closes the result set, or returns None if no row is present. There's also Query.scalar(), if using the Query API.




回答2:


what you are asking for called unpacking, ResultProxy is an iterable, so we can do

# there will be single record
record, = db.engine.execute('select count(id) from sometable')
# this record consist of single value
count, = record



回答3:


The ResultProxy in SQLAlchemy (as documented here http://docs.sqlalchemy.org/en/latest/core/connections.html?highlight=execute#sqlalchemy.engine.ResultProxy) is an iterable of the columns returned from the database. For a count() query, simply access the first element to get the column, and then another index to get the first element (and only) element of that column.

result = db.engine.execute('select count(id) from sometable')
count = result[0][0]

If you happened to be using the ORM of SQLAlchemy, I would suggest using the Query.count() method on the appropriate model as shown here: http://docs.sqlalchemy.org/en/latest/orm/query.html?highlight=count#sqlalchemy.orm.query.Query.count



来源:https://stackoverflow.com/questions/44689793/getting-count-from-sqlalchemy

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!