rowhouse

A SQLAlchemy wrapper that stays out of your way


Keywords
database, sql, python
License
Other
Install
pip install rowhouse==1.0.3

Documentation

Rowhouse

version Build status of master branch

For when you just want to write SQL

Rowhouse is a SQLAlchemy wrapper that attempts to strike a happy medium between using raw database bindings like psycopg2 and using the full SQLAlchemy API.

Use it when:

  • You don't want to mess with connections, cursors, sessions, etc
  • You don't need or want an ORM or repository
  • You don't want to look up SQLAlchemy's expression language every time you need a non-trivial query
  • You just want to write some SQL, and work with plain old dicts and lists
  • You want some convenient helper functions for common operations

Install

pip install rowhouse

Basic Usage

from rowhouse import Connection
db = Connnection('postgresql://localhost/mydatabase')

# Run some SQL
row = db.fetchone('SELECT * FROM users WHERE username = %s', ('mreynolds',))
print('Name = ' + row['fullname'])

for row in db.fetchiter('SELECT * FROM users'):
    print('User: ' + row['fullname'])

db.begin()
db.execute('CREATE TABLE groups (...)')
db.execute('INSERT INTO groups VALUES (%s, %s)', ('firefly', 'mreynolds'))
db.commit()

# Some convenient helpers
with db.transaction():
    row = db.findone('users', username='mreynolds')
    db.update('users', {
        'role': 'captain'
    }, id=row['id'])
    newrow = db.insert('users', {
        'fullname': 'Zoe Washburne',
        'username': 'zwashburne',
        'role': 'first_mate'
    })

To Do

  • [x] Implement find* methods
  • [x] Implement insert/update/delete/upsert methods
  • [x] Add tests and CI
  • [x] Add packaging and publish to pypi
  • [ ] More configurability - constructor, setters, etc
  • [ ] Simple model support - little more than classes with a Connection baked in and some convenience methods