异步orm。

orm的Python项目详细描述


orm

Build StatusCoveragePackage version

orm包是python的异步orm,支持postgres, mysql和sqlite。ORM使用:

因为orm是基于sqlalchemy核心构建的,所以可以使用alembic提供 数据库迁移。

orm仍在开发中:我们建议用orm~=0.1

固定任何依赖项。

note:使用ipython从控制台尝试此操作,因为它支持await

importdatabasesimportormimportsqlalchemydatabase=databases.Database("sqlite:///db.sqlite")metadata=sqlalchemy.MetaData()classNote(orm.Model):__tablename__="notes"__database__=database__metadata__=metadataid=orm.Integer(primary_key=True)text=orm.String(max_length=100)completed=orm.Boolean(default=False)# Create the databaseengine=sqlalchemy.create_engine(str(database.url))metadata.create_all(engine)# .create()awaitNote.objects.create(text="Buy the groceries.",completed=False)awaitNote.objects.create(text="Call Mum.",completed=True)awaitNote.objects.create(text="Send invoices.",completed=True)# .all()notes=awaitNote.objects.all()# .filter()notes=awaitNote.objects.filter(completed=True).all()# exact, iexact, contains, icontains, lt, lte, gt, gte, innotes=awaitNote.objects.filter(text__icontains="mum").all()# .get()note=awaitNote.objects.get(id=1)# .update()awaitnote.update(completed=True)# .delete()awaitnote.delete()# 'pk' always refers to the primary keynote=awaitNote.objects.get(pk=2)note.pk# 2

ORM支持在外键之间加载和筛选…

importdatabasesimportormimportsqlalchemydatabase=databases.Database("sqlite:///db.sqlite")metadata=sqlalchemy.MetaData()classAlbum(orm.Model):__tablename__="album"__metadata__=metadata__database__=databaseid=orm.Integer(primary_key=True)name=orm.String(max_length=100)classTrack(orm.Model):__tablename__="track"__metadata__=metadata__database__=databaseid=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=awaitAlbum.objects.create(name="Malibu")awaitTrack.objects.create(album=malibu,title="The Bird",position=1)awaitTrack.objects.create(album=malibu,title="Heart don't stand a chance",position=2)awaitTrack.objects.create(album=malibu,title="The Waters",position=3)fantasies=awaitAlbum.objects.create(name="Fantasies")awaitTrack.objects.create(album=fantasies,title="Help I'm Alive",position=1)awaitTrack.objects.create(album=fantasies,title="Sick Muse",position=2)# Fetch an instance, without loading a foreign key relationship on it.track=awaitTrack.objects.get(title="The Bird")# We have an album instance, but it only has the primary key populatedprint(track.album)# Album(id=1) [sparse]print(track.album.pk)# 1print(track.album.name)# Raises AttributeError# Load the relationship from the databaseawaittrack.album.load()asserttrack.album.name=="Malibu"# This time, fetch an instance, loading the foreign key relationship.track=awaitTrack.objects.select_related("album").get(title="The Bird")asserttrack.album.name=="Malibu"# Fetch instances, with a filter across an FK relationship.tracks=Track.objects.filter(album__name="Fantasies")assertlen(tracks)==2# Fetch instances, with a filter and operator across an FK relationship.tracks=Track.objects.filter(album__name__iexact="fantasies")assertlen(tracks)==2# Limit a querytracks=awaitTrack.objects.limit(1).all()assertlen(tracks)==1

数据类型

所有字段类型都支持以下关键字参数。

  • primary_key
  • allow_null
  • default
  • index
  • unique

除非设置了以下任一项,否则所有字段都是必需的:

  • allow_null-创建可为空的列。将默认值设置为None
  • allow_blank-允许空字符串进行验证。将默认值设置为""
  • default-设置字段的默认值。

支持以下列类型。 请参阅type-specific validation keyword arguments的字体系统。

  • orm.String(max_length)
  • orm.Text()
  • orm.Boolean()
  • orm.Integer()
  • orm.Float()
  • orm.Date()
  • orm.Time()
  • orm.DateTime()
  • orm.JSON()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
带有服务类安卓的java altbeacon   java在OpenXava免费版本中可以创建多个用户吗?   java如何决定定义变量“private”?   java为什么GetMethodID()对不存在的方法不返回NULL?   java Get JComboBox项字符串表示法   java如何在ifs之间设置限制?   java Android错误:IllegalStateException   JavaSpring4MVC语言环境已更改,但JSP对此没有响应   java Netbeans:如何构建。jar文件随附外部文件。jar库?   Spring Petclinic项目Maven编译时出现java错误   声明Java数组增量元素的快速方法   java无法使用相对xpath找到元素   javascript无法更改标题,也无法在操作栏上显示图标   java标签不是一个接一个地动态创建的   java如何使用ThymeLeaf将对象的属性绑定到隐藏字段?   java从EJB无状态会话bean调用CDI会话范围的生产者方法   java为什么num+=array[i]与for循环中的num=num+array[i]的工作方式不同   使用jsonsimple实现jQuery UI自动完成的java JSON格式   JavaFaceletsUI:重复标记中断JSF表单验证