๐Ÿ“ฆ encode / orm

An async ORM. ๐Ÿ—ƒ

โ˜… 1.9k stars โ‘‚ 97 forks ๐Ÿ‘ 1.9k watching โš–๏ธ BSD 3-Clause "New" or "Revised" License
๐Ÿ“ฅ Clone https://github.com/encode/orm.git
HTTPS git clone https://github.com/encode/orm.git
SSH git clone git@github.com:encode/orm.git
CLI gh repo clone encode/orm
Amin Alaee Amin Alaee add UUID field (#105) a33ea36 4 years ago ๐Ÿ“ History
๐Ÿ“‚ a33ea3602acebe7cdf83d49380ff7a78ef79c140 View all commits โ†’
๐Ÿ“ .github
๐Ÿ“ docs
๐Ÿ“ orm
๐Ÿ“ scripts
๐Ÿ“ tests
๐Ÿ“„ .codecov.yml
๐Ÿ“„ .gitignore
๐Ÿ“„ LICENSE.md
๐Ÿ“„ mkdocs.yml
๐Ÿ“„ README.md
๐Ÿ“„ requirements.txt
๐Ÿ“„ setup.cfg
๐Ÿ“„ setup.py
๐Ÿ“„ README.md

ORM

Build Status Coverage Package version

The orm package is an async ORM for Python, with support for Postgres, MySQL, and SQLite. ORM is built with:

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


Installation

$ pip install orm

You 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.


Quickstart

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)