想看 ORM 到底发了什么 SQL,怎么开日志?日志里会不会泄漏敏感参数?怎么只记录慢查询?这篇在真实的 PostgreSQL 上把几种做法的输出和开销逐个打印出来。
INFO sqlalchemy.engine.Engine BEGIN (implicit)
INFO sqlalchemy.engine.Engine INSERT INTO u (name, pw) VALUES (%(name)s::VARCHAR, %(pw)s::VARCHAR) RETURNING u.id
INFO sqlalchemy.engine.Engine [generated in 0.00004s] {'name': 'n0', 'pw': 'secret-hash'}
INFO sqlalchemy.engine.Engine COMMIT
INFO sqlalchemy.engine.Engine BEGIN (implicit)
INFO sqlalchemy.engine.Engine INSERT INTO u (name, pw) VALUES (%(name)s::VARCHAR, %(pw)s::VARCHAR) RETURNING u.id
INFO sqlalchemy.engine.Engine [cached since 0.0008152s ago] {'name': 'n1', 'pw': 'secret-hash'}
INFO sqlalchemy.engine.Engine COMMIT
INFO sqlalchemy.engine.Engine BEGIN (implicit)
INFO sqlalchemy.engine.Engine SELECT u.id, u.name, u.pw
FROM u
WHERE u.name = %(name_1)s::VARCHAR
INFO sqlalchemy.engine.Engine [generated in 0.00004s] {'name_1': 'n0'}
INFO sqlalchemy.engine.Engine SELECT u.id, u.name, u.pw
…(共 18 行)
出现 "cached since" 的行数: 2 | 出现 "generated in" 的行数: 2上一篇:悲观锁;下一篇:Flask-Migrate Migration 文件。
SELECT u.id, u.name
Col ('id', 'name')
Row (1, 'n0')
Row (2, 'n1') 默认 日志里能看到 "hunter2-hash":True
['BEGIN (implicit)', "[generated in 0.00004s] {'name': 'alice', 'pw': 'hunter2-hash'}"]
hide_parameters=True 日志里能看到 "hunter2-hash":False
['BEGIN (implicit)', '[generated in 0.00004s] [SQL parameters hidden due to hide_parameters=True]'] select 1 0.2 ms
select pg_sleep(0.2) 203.6 ms只记下了: [(153, 'select pg_sleep(0.15)')]
不开日志 101.2 ms INFO(echo) 122.9 ms