The orm package is an async ORM for Python, with support for Postgres,
MySQL, and SQLite. ORM is built with:
- SQLAlchemy core for query building.
databasesfor cross-database async support.typesystemfor data validation.
Because ORM is built on SQLAlchemy core, you can use Alembic to provide database migrations.
ORM is still under development: We recommend pinning any dependencies with orm~=0.1
$ pip install ormYou can install the required database drivers with:
$ pip install orm[postgresql]
$ pip install orm[mysql]
$ pip install orm[sqlite]Driver support is provided using one of asyncpg, aiomysql, or aiosqlite.
Note that if you are using any synchronous SQLAlchemy functions such as engine.create_all() or alembic migrations then you still have to install a synchronous DB driver: psycopg2 for PostgreSQL and pymysql for MySQL.
Note: Use ipython to try this from the console, since it supports await.
import databases
import orm
import sqlalchemy
database = databases.Database("sqlite:///db.sqlite")
metadata = sqlalchemy.MetaData()
class Note(orm.Model):
__tablename__ = "notes"
__database__ = database
__metadata__ = metadata
id = orm.Integer(primary_key=True)
text = orm.String(max_length=100)
completed = orm.Boolean(default=False)
# Create the database and tables
engine = sqlalchemy.create_engine(str(database.url))
metadata.create_all(engine)
await Note.objects.create(text="Buy the groceries.", completed=False)
note = await Note.objects.get(id=1)
print(note)
# Note(id=1, text="Buy the groceries.", completed=False)