Skip to main content

An easy profiler for SQLAlchemy queries

Project description

SQLAlchemy Easy Profile

Build Status image codecov License

Inspired by django-querycount, is a library that hooks into SQLAlchemy to collect metrics, streaming statistics into console output and help you understand where in application you have slow or redundant queries.

report example

Installation

Install the package with pip:

pip install sqlalchemy-easy-profile

Session profiler

The profiling session hooks into SQLAlchmey and captures query statements, duration information, and query parameters. You also may have multiple profiling sessions active at the same time on the same or different Engines. If multiple profiling sessions are active on the same engine, queries on that engine will be collected by both sessions and reported on different reporters.

You may begin and commit a profiling session as much as you like. Calling begin on an already started session or commit on an already committed session will raise an AssertionError. You also can use a contextmanager interface for session profiling or used it like a decorator. This has the effect of only profiling queries occurred within the decorated function or inside a manager context.

How to use begin and commit:

import easy_profile import SessionProfiler

profiler = SessionProfiler()

profiler.begin()
session.query(User).filter(User.name == "Arthur Dent").first()
profiler.commit()

print(profiler.stats)

How to use as a context manager interface:

profiler = SessionProfiler()
with profiler:
    session.query(User).filter(User.name == "Arthur Dent").first()

print(profiler.stats)

How to use profiler as a decorator:

profiler = SessionProfiler()

class UsersResource:
    @profiler()
    def on_get(self, req, resp, **args, **kwargs):
        return session.query(User).all()

Keep in mind that profiler decorator interface accepts a special reporter and If it was not defined by default will be used a base streaming reporter. Decorator also accept name and name_callback optional parameters.

WSGI integration

Easy Profiler provides a specified middleware which can prints the number of database queries for each HTTP request and can be applied as a WSGI server middleware. So you can easily integrate Easy Profiler into any WSGI application.

How to integrate with a Flask application:

from flask import Flask
import easy_profile import EasyProfileMiddleware

app = Flask(__name__)
app.wsgi_app = EasyProfileMiddleware(app.wsgi_app)

How to integrate with a Falcon application:

import falcon
import easy_profile import EasyProfileMiddleware

api = application = falcon.API()
application = EasyProfileMiddleware(application)

Testing

To run the tests:

python setup.py test

Or use tox for running in all tests environments.

License

This code is distributed under the terms of the MIT license.

Changes

A full changelog is maintained in the CAHNGELOG file.

Contributing

sqlalchemy-easy-profile is an open source project and contributions are welcome! Check out the Issues page to see if your idea for a contribution has already been mentioned, and feel free to raise an issue or submit a pull request.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sqlalchemy-easy-profile-0.4.1.tar.gz (8.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sqlalchemy_easy_profile-0.4.1-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

File details

Details for the file sqlalchemy-easy-profile-0.4.1.tar.gz.

File metadata

  • Download URL: sqlalchemy-easy-profile-0.4.1.tar.gz
  • Upload date:
  • Size: 8.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.5.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.3

File hashes

Hashes for sqlalchemy-easy-profile-0.4.1.tar.gz
Algorithm Hash digest
SHA256 e6693b7b97689006da3970a4deb14b7eb8352edd3fa942aab7eab2ee17637fdf
MD5 858925757a9b833f2ffa648b7ad533c2
BLAKE2b-256 1f7a390aa8f36dd2fae3da53a91f3c01d4cae385dde45926c5a556d447700df0

See more details on using hashes here.

File details

Details for the file sqlalchemy_easy_profile-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: sqlalchemy_easy_profile-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 10.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.5.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.3

File hashes

Hashes for sqlalchemy_easy_profile-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bc9ab8e0bcf810640dbee0dc602cf3587097365f51a426ac2100b4051df73205
MD5 83b9b2620b5a1d3a0bd3dffea5c813eb
BLAKE2b-256 85c6f4850f2264017d8096aeaffdffd9cbec2110b8bdf5fa9a576d6a054c9eec

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page