[解決済み] SQLAlchemyでSELECT COUNT(*)で行数を数えるには?
2023-05-22 18:38:42
質問
を生成することが可能かどうか知りたいのですが。
SELECT COUNT(*) FROM TABLE
ステートメントを生成することができるのか知りたいです。
execute()
.
を使ったら
session.query(table).count()
とすると、次のようなものが生成されます。
SELECT count(*) AS count_1 FROM
(SELECT table.col1 as col1, table.col2 as col2, ... from table)
を使用すると、InnoDBを使用したMySQLでは著しく遅くなります。で提案されているように、テーブルが既知の主キーを持つことを必要としない解決策を探しています。 SQLAlchemy を使ってテーブルの行数を取得する .
どのように解決するのですか?
以下のSELECTをSQLAlchemyで両レイヤーにレンダリングすることができました。
SELECT count(*) AS count_1
FROM "table"
SQL Expressionレイヤーからの使用法
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
の条件が既に指定されています。
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] リストからランダムに項目を選択するにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] Pythonのキャッシュライブラリはありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] Pythonの文字列書式をリストで使う