Skip to main content

PostgreSQL for Gevent kept Simple

Project description

Provides:

  • db(sql, *values).row/rows/affected

  • id = db_insert(table_name, _return='id', name=value,..)

  • affected = db_update(table_name, where=dict(name=value, item_in=tuple_of_values), name=value,..)

  • result = db_transaction(code)

  • raise db_rollback

  • db("""ALTER TYPE "my_type" ADD VALUE 'my_value'""", autocommit=True) # Avoid "cannot run inside a transaction block".

  • db('SELECT * FROM "table" WHERE "name" LIKE %s', escape_like(fragment))

  • connection pool blocks only for the first connection - for quick deploy

  • auto reconnect and retry

  • optional log of each query

Usage:

sudo apt-get install --yes gcc libevent-dev libpq-dev python-dev
sudo pip install pg4geks

from pg4geks import db, db_config, db_insert, db_update, db_transaction
db_config(name='test', user='user', password='password')
# Defaults: host='127.0.0.1', port=5432, pool_size=10, patch_psycopg2_with_gevent=True, log=None

row = db('SELECT "column" FROM "table" WHERE "id" = %s', id).row
assert row is None or row.column == row['column']

return db('SELECT * FROM "table" WHERE "related_id" IN %s AND "parent_id" = %s', tuple(related_ids), parent_id).rows
# Please note that "tuple()" should be used with "IN %s", to keep "list []" for PostgreSQL Array operations.
# http://pythonhosted.org/psycopg2/usage.html#adaptation-of-python-values-to-sql-types

return [
    processed(row)
    for row in db('SELECT * FROM "table" LIMIT 10')
]  # Please note that no ").rows" is required for iteration.

try:
    def code():
        db('INSERT INTO "table1" ("quantity") VALUES (%s)', -100)
        db('INSERT INTO "table2" ("quantity") VALUES (%s)', +1/0)

        if error:
            raise db_rollback

        return result
    result = db_transaction(code)

except db_rollback:
    pass  # Or not.

id = db_insert('table',
    related_id=related_id,
    parent_id=parent_id,
    _return='id',
)

assert db_update('table',
    related_id=None,
    where=dict(id=id),  # Or: id=tuple(ids_to_update)
) == 1

# See tests for more usage examples.

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

pg4geks-0.2.3.tar.gz (5.3 kB view hashes)

Uploaded Source

Supported by

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