Twistar: Twisted Active Record
Twistar is a Python implementation of the active record pattern (also known as an object-relational mapper or ORM) that uses the Twisted framework’s RDBMS support to provide a non-blocking interface to relational databases.
Twistar currently features: * A thoroughly asynchronous API * Object validations (and support for the easy creation of new validation methods) * Support for callbacks before saving / creating / updating / deleting * Support for object relational models that can be queried asynchronously * A simple interface to DBAPI objects * A framework to support any relational database that has a module that implements the Python Database API Specification v2.0 (MySQL, PostgreSQL, and SQLite are all supported now) * Support for object polymorphism * Unit tests
Quick Example For Those In A Rush
For this example, assume that there is a table named “users” with varchar columns for first_name and last_name and an int age column.
#!/usr/bin/env python
from twisted.enterprise import adbapi
from twistar.registry import Registry
from twistar.dbobject import DBObject
from twisted.internet import reactor
class User(DBObject):
pass
def done(user):
print "A user was just created with the name %s" % user.first_name
reactor.stop()
# Connect to the DB
Registry.DBPOOL = adbapi.ConnectionPool('MySQLdb', user="twistar", passwd="apass", db="twistar")
# make a user
u = User()
u.first_name = "John"
u.last_name = "Smith"
u.age = 25
# Or, use this shorter version:
u = User(first_name="John", last_name="Smith", age=25)
# save the user
u.save().addCallback(done)
reactor.run()
Then, finding this user is easy:
def found(users):
print "I found %i users!" % len(users)
for user in users:
print "User: %s %s" % (user.first_name, user.last_name)
u = User.findBy(first_name="John", age=25).addCallback(found)
This is a very simple example - see the Examples and User Documentation for more complicated examples and additional uses.
Installation
## Prerequisites One or more of the following Python database interfaces that implement the DBAPI PEP must first be installed: * MySQLdb (MySQL interface) * psycopg2 (PostgreSQL interface) * sqlite3 (SQLite interface)
Install
Simply run:
pip install twistar
Unit Tests
Simply run:
trial twistar
Debugging
To get debugging information (all queries executed) using twisted.python.log, just use:
from twistar.dbconfig.base import InteractionBase
InteractionBase.LOG = True
Docs
Questions and complaints can be added to https://github.com/bmuller/twistar