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.
One or more of the following Python database interfaces that implement the DBAPI PEP must first be installed:
pip install twistar
To get debugging information (all queries executed) using twisted.python.log, just use:
from twistar.dbconfig.base import InteractionBase InteractionBase.LOG = True
Questions and complaints Send questions to firstname.lastname@example.org.