2017-06-22 4 views
3

ich habe:Erste COUNT von sqlalchemy

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

Das zurückgegebene Objekt sqlalchemy.engine.result.ResultProxy ist.

Wie bekomme ich den Zählwert von res?

Res nicht einen Index zugegriffen, aber ich habe dies herausgefunden wie:

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

Es muss richtig ein einfacherer Weg geben? Was ist es? Ich habe es noch nicht entdeckt. Hinweis: Die db ist eine postgres db.

Antwort

4

Während die anderen Antworten arbeiten, bietet SQLAlchemy eine Abkürzung für skalare Abfragen als ResultProxy.scalar():

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

scalar() holt die erste Spalte der ersten Reihe und die Ergebnismenge schließt, oder gibt keine wenn keine Zeile vorhanden ist. Es gibt auch Query.scalar(), wenn die Query API verwendet wird.

3

, was Sie für genannt fragen Auspacken ResultProxy ist ein iterable, so können wir

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

Die ResultProxy in SQLAlchemy tun (wie hier http://docs.sqlalchemy.org/en/latest/core/connections.html?highlight=execute#sqlalchemy.engine.ResultProxy dokumentiert) ist ein iterable der Spalten aus der Datenbank zurück . Für eine count() Abfrage, greifen Sie einfach auf das erste Element, um die Spalte zu erhalten, und dann auf einen weiteren Index, um das erste (und einzige) Element dieser Spalte zu erhalten.

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

Wenn Sie zufällig die ORM von SQLAlchemy zu verwenden, würde ich auf das entsprechende Modell des Query.count() Methode vorschlagen, wie hier gezeigt: http://docs.sqlalchemy.org/en/latest/orm/query.html?highlight=count#sqlalchemy.orm.query.Query.count