迁移。
项目描述
ORM
该orm
包是一个用于Python的异步ORM,支持Postgres、MySQL和SQLite。ORM使用
- SQLAlchemy核心进行查询构建。
databases
提供跨数据库异步支持。typesystem
进行数据验证。
由于ORM建立在SQLAlchemy核心之上,您可以使用Alembic提供数据库迁移。
ORM仍在开发中:我们建议使用orm~=0.1
固定任何依赖项
注意:由于它支持await
,请使用ipython
在控制台中尝试此操作。
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
engine = sqlalchemy.create_engine(str(database.url))
metadata.create_all(engine)
# .create()
await Note.objects.create(text="Buy the groceries.", completed=False)
await Note.objects.create(text="Call Mum.", completed=True)
await Note.objects.create(text="Send invoices.", completed=True)
# .all()
notes = await Note.objects.all()
# .filter()
notes = await Note.objects.filter(completed=True).all()
# exact, iexact, contains, icontains, lt, lte, gt, gte, in
notes = await Note.objects.filter(text__icontains="mum").all()
# .get()
note = await Note.objects.get(id=1)
# .update()
await note.update(completed=True)
# .delete()
await note.delete()
# 'pk' always refers to the primary key
note = await Note.objects.get(pk=2)
note.pk # 2
ORM支持通过外键加载和过滤...
import databases
import orm
import sqlalchemy
database = databases.Database("sqlite:///db.sqlite")
metadata = sqlalchemy.MetaData()
class Album(orm.Model):
__tablename__ = "album"
__metadata__ = metadata
__database__ = database
id = orm.Integer(primary_key=True)
name = orm.String(max_length=100)
class Track(orm.Model):
__tablename__ = "track"
__metadata__ = metadata
__database__ = database
id = orm.Integer(primary_key=True)
album = orm.ForeignKey(Album)
title = orm.String(max_length=100)
position = orm.Integer()
# Create some records to work with.
malibu = await Album.objects.create(name="Malibu")
await Track.objects.create(album=malibu, title="The Bird", position=1)
await Track.objects.create(album=malibu, title="Heart don't stand a chance", position=2)
await Track.objects.create(album=malibu, title="The Waters", position=3)
fantasies = await Album.objects.create(name="Fantasies")
await Track.objects.create(album=fantasies, title="Help I'm Alive", position=1)
await Track.objects.create(album=fantasies, title="Sick Muse", position=2)
# Fetch an instance, without loading a foreign key relationship on it.
track = await Track.objects.get(title="The Bird")
# We have an album instance, but it only has the primary key populated
print(track.album) # Album(id=1) [sparse]
print(track.album.pk) # 1
print(track.album.name) # Raises AttributeError
# Load the relationship from the database
await track.album.load()
assert track.album.name == "Malibu"
# This time, fetch an instance, loading the foreign key relationship.
track = await Track.objects.select_related("album").get(title="The Bird")
assert track.album.name == "Malibu"
# Fetch instances, with a filter across an FK relationship.
tracks = Track.objects.filter(album__name="Fantasies")
assert len(tracks) == 2
# Fetch instances, with a filter and operator across an FK relationship.
tracks = Track.objects.filter(album__name__iexact="fantasies")
assert len(tracks) == 2
# Limit a query
tracks = await Track.objects.limit(1).all()
assert len(tracks) == 1
数据类型
以下关键字参数支持所有字段类型。
primary_key
allow_null
default
index
unique
除非设置了以下之一,否则所有字段都是必需的
allow_null
- 创建一个可空列。默认设置为None
。allow_blank
- 允许空字符串进行验证。默认设置为""
。default
- 为字段设置默认值。
以下列类型被支持。有关特定类型的验证关键字参数,请参阅TypeSystem的文档。
orm.String(max_length)
orm.Text()
orm.Boolean()
orm.Integer()
orm.Float()
orm.Date()
orm.Time()
orm.DateTime()
orm.JSON()
项目详情
关闭
savannah-0.0.1.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 33d8327c565e10c7e683cad1fb75d0722cda69f6a066743111990ac960ef874b |
|
MD5 | 4f6a86f3eaabfa2eb87753ef3cfd6826 |
|
BLAKE2b-256 | 4fb295259dc4c990a6616b21a6d5f999e1601392b0c1299b8d077a29fa655982 |