安全圈 | 专注于最新网络信息安全讯息新闻

首页

不可破壞/sqltap:使用sqlalchemy的應用程序的sql分析和內省

作者 rampino 时间 2020-02-27
all

sqltap幫助您快速瞭解:

完整檔案

http://sqltap.unhreveable.com

動機

當您在高抽象級別工作時,程式碼效率低下並導致效能問題的情况更為常見。SQLAlchemy的ORM非常優秀,如果您知道應該去哪裡查找,它可以讓您靈活地修復這些效率低下的問題!sqltap是一個連結到SQLAlchemy的庫,用於收集發送到資料庫的所有査詢的度量。sqltap可以幫助您找到在應用程序中生成慢査詢或冗餘査詢的位置,這樣您就可以用最少的努力修復它們。

快速啟動示例

import sqltap profiler = sqltap.start() session.query(Knights).filter_by(who_say = 'Ni').all() statistics = profiler.collect() sqltap.report(statistics, "report.html")

WSGI集成

您可以輕鬆地將SQLTap集成到任何WSGI應用程序中。這將在/\u sqltap\u創建一個最新的報告頁,您可以在其中動態啟用/禁用分析,以便可以在生產環境中有選擇地運行它。集成非常簡單:

import sqltap.wsgi wsgi_app = sqltap.wsgi.SQLTapMiddleware(wsgi_app)

例如,要與燒瓶應用程序集成:

import sqltap.wsgi app.wsgi_app = sqltap.wsgi.SQLTapMiddleware(app.wsgi_app)

文字報告

有時我們想在遠程服務器上分析sqlalchemy。在這些服務器上查看HTML格式的SQLTap報表非常方便。或者,SQLTap以可讀的管道提供文字分析報告。

import sqltap profiler = sqltap.start() session.query(Knights).filter_by(who_say = 'Ni').all() statistics = profiler.collect() sqltap.report(statistics, "report.txt", report_format="text")

高級示例

import sqltap def context_fn(*args): """ Associate the request path, unique id with each query statistic """ return (framework.current_request().path, framework.current_request().id) # start the profiler immediately profiler = sqltap.start(user_context_fn=context_fn) def generate_reports(): """ call this at any time to generate query reports reports """ all_stats = [] per_request_stats = collections.defaultdict(list) per_page_stats = collections.defaultdict(list) qstats = profiler.collect() for qs in qstats: all_stats.append(qs) page = qstats.user_context[0] per_page_stats[page].append(qs) request_id = qstats.user_context[1] per_request_stats[request_id].append(qs) # report with all queries sqltap.report(all_stats, "report_all.html") # a report per page for page, stats in per_page_stats.items(): sqltap.report(stats, "report_page_%s.html" % page) # a report per request for request_id, stats in per_request_stats.items(): sqltap.report(stats, "report_request_%s.html" % request_id)

測試

運行sqltap測試:

python setup.py test

許可證

阿帕奇