pg4geks

PostgreSQL for Gevent kept Simple


License
MIT
Install
pip install pg4geks==0.2.3

Documentation

pg4geks

[PostgreSQL][] for [Gevent][] kept [Simple][] [PostgreSQL]: https://www.postgresql.org/ [Gevent]: http://www.gevent.org/ [Simple]: https://en.wikipedia.org/wiki/KISS_principle

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.

pg4geks version 0.2.3
Copyright (C) 2013-2017 by Denis Ryzhkov denisr@denisr.com
MIT License, see http://opensource.org/licenses/MIT