両方のレイヤーでSQLAlchemyを使用して次のSELECTをレンダリングすることができました。
SELECT count(*) AS count_1
FROM "table"
SQL式レイヤーからの使用
from sqlalchemy import select, func, Integer, Table, Column, MetaData
metadata = MetaData()
table = Table("table", metadata,
Column('primary_key', Integer),
Column('other_column', Integer) # just to illustrate
)
print select([func.count()]).select_from(table)
ORMレイヤーからの使用
あなたはただサブクラス化しQuery
(おそらくとにかく持っているでしょう)、count()
このような特殊なメソッドを提供します。
from sqlalchemy.sql.expression import func
class BaseQuery(Query):
def count_star(self):
count_query = (self.statement.with_only_columns([func.count()])
.order_by(None))
return self.session.execute(count_query).scalar()
クエリの順序がリセットされることに注意してくださいorder_by(None)
。これは、カウントとは関係ありません。
このメソッドを使用すると、すでに指定されているcount(*)
すべての条件を尊重する任意のORMクエリを実行できます。filter
join