PostgreSQL for Gevent kept Simple.
Python Shell
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.gitignore
README.md
install.sh
pg4geks.py
setup.py
upload.sh

README.md

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