エンジンで「エコー」をオンにして、query.all()
を呼び出すとDBクエリが1回送信され、次に各レポートに対してクエリが送信されます。report.as_dict()
はフィールドにアクセスします。SQLAlchemyリスト内の各エンティティに対するリクエストを送信
query = db_session.query(Report)
query = query.filter(or_(Report.network_id == network_id, Report.network_id == None))
reports = query.all()
db_session.commit()
resp = [report.as_dict() for report in reports]
クエリquery.all()
に送られた -
2017-09-19 16:02:28,504 INFO sqlalchemy.engine.base.Engine SELECT report.id AS report_id, report.network_id AS report_network_id, report.account_id AS report_account_id, report.name AS report_name, report.notes AS report_notes, report.structure AS report_structure, report.type AS report_type, report.version AS report_version
FROM report WHERE report.network_id = %(network_id_1)s OR report.network_id IS NULL ORDER BY report.id
2017-09-19 16:02:28,504 INFO sqlalchemy.engine.base.Engine {'network_id_1': '5850'}
とreport.as_dict()
(PARAM_1 =レポートID)にアクセスし、各レポートのために - 報告書の全体リストがあるよう
2017-09-19 16:04:15,100 INFO sqlalchemy.engine.base.Engine SELECT report.id AS report_id, report.network_id AS report_network_id, report.account_id AS report_account_id, report.name AS report_name, report.notes AS report_notes, report.structure AS report_structure, report.type AS report_type, report.version AS report_version
FROM report WHERE report.id = %(param_1)s
2017-09-19 16:04:15,100 INFO sqlalchemy.engine.base.Engine {'param_1': 1}
に見えます最初のクエリで取得されましたが、まだそれぞれのクエリが送信されていますが、どのようにこの動作を変更できますか?
私の環境:あなたがTrue
にexpire_on_commit
セットを持っているので、これはされているWindows 10、Pythonの3.5.0、SQLAlchemyの1.2.0b2