异步orm+pydantic=ormantic

ormantic的Python项目详细描述


正常

ormantic包是python的异步orm,支持postgres, mysql和sqlite。ormatic是来自^{}的fork,用于 与^{}集成,并使用:

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

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

importdatabasesimportsqlalchemyimportormanticasormdatabase=databases.Database("sqlite:///db.sqlite")metadata=sqlalchemy.MetaData()classNote(orm.Model):id:orm.Integer(primary_key=True)=Nonetext:orm.String(max_length=100)completed:orm.Boolean()=FalseclassMapping:table_name="notes"database=databasemetadata=metadata# 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()note=awaitNote.objects.get(id=2)assertnote.pk==note.id==2

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

importdatabasesimportsqlalchemyimportormanticasormdatabase=databases.Database("sqlite:///db.sqlite")metadata=sqlalchemy.MetaData()classAlbum(orm.Model):id:orm.Integer(primary_key=True)=Nonename:orm.String(max_length=100)classMapping:table_name="album"metadata=metadatadatabase=databaseclassTrack(orm.Model):id:orm.Integer(primary_key=True)=Nonealbum:orm.ForeignKey(Album)title:orm.String(max_length=100)position:orm.Integer()classMapping:table_name="track"metadata=metadatadatabase=database# Create the databaseengine=sqlalchemy.create_engine(str(database.url))metadata.create_all(engine)# 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.assertTrack.objects.filter(album__name__iexact="fantasies").count()==2

数据类型

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

  • primary_key
  • allow_null
  • index
  • unique

支持以下列类型:

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

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

推荐PyPI第三方库


热门话题
ArrayList Java中的搜索字符串   另一个web应用程序的java访问会话   另一个应用程序中的活动和服务之间的java通信   java根据Json字符串类型将Json字符串转换为对象   eclipse如何解决java中的错误异常。lang.NoSuchMethodError:'java。字符串javax。摆动JOptionPane。showInputDialog(java.lang.String)'   线程“main”java中的安卓异常。lang.NoClassDefFoundError:org/codehaus/jackson/JsonParseException   java如何在安卓 emulator上显示Mat图像?使用NDK   Java在本地读取测试源文件,但在服务器上读取失败   java dowhile循环用于计算输入数字中的数字。故障排除代码   JAva初学者在编写获取成本的方法时遇到困难   java是shell游戏。我如何让物体移动,特别是在特定的曲线上,但顺序是随机的?   java如何区分两个同名的JButton   java为什么我在Spring Boot中需要一个接口?   java将文件路径插入数据库将删除\   使用InterfaceType初始化java对象   java如何部署一个分为Angular、Spring Boot和MySQL的项目?   java如何使用Symja解决不等式?