跳转到主要内容

基于sqlalchemy的异步小型对象映射器

项目描述

AsyncOM

Async OM是一个基于sqlalchemy ORM层的超基本对象映射器。

我们使用声明式扩展来构建类,并在查询中实例化它们。(*有限支持)

目前尚不支持关系。

依赖 encode/databases

动机

我不喜欢asyncpgsa方法,他们只是使用核心层来构建运行sqlgenerator。我喜欢围绕sqlalchemy的声明式层构建,后来发现我可以在session.query上修补一些方法,使用它自己的sql生成器,并将其查询系统异步化。

对象持久性最小,需要一些关注。

使用方法

from sqlalchemy.ext.declarative import declarative_base
import sqlalchemy as sa
from databases import DatabaseURL

Base = declarative_base()


class OrmTest(Base):
    __tablename__ = 'orm_test'

    id = sa.Column(sa.Integer, primary_key=True)
    name = sa.Column(sa.String(100), index=True)
    value = sa.Column(sa.Text)

# Instead of usign Database from databases, you can use:
db = OMDatabase(DatabaseURL('postgres://root@postgres:{port}/guillotina'))

# instances of the object can be created with:
test = OrmTest(name='xx', value='yy')
await db.add(test)

print(test.id)  # pk column is correct set

# get an instance
ins = await db.query(OrmTest).get(1)

total = await db.query(OrmTest).count()
assert total == 1

# remove it
await db.delete(ins)

# filter them
res = await db.query(OrmTest).filter(
    OrmTest.name.like('xx')).all()

# Or just iterate over the results with a cursor:
async for row in db.query(OrmTest).filter(OrmTest.name.like('xx')):
    print(f'Row {row.name}: {row.value}')


# There is basic support for table inheritance query OneToOne


# Look at tests

变更日志

0.3.3

  • 修复Python 3.10的collections导入问题

0.3.2

  • 支持查询多个主键

0.3.1

  • 能够为OMQuery提供mapper_factory [vangheem]

0.3.0

  • 修复使用om.delete继承对象时的bug

0.2.3

  • 修复添加产品时布尔表达式的问题。允许添加值为0的值

0.2.1

  • 当检查json字段数组中的null时进行的小修复

0.1.9

  • 添加了列的默认值和onupdate更新和添加功能(仅适用于标量值和可调用对象)
  • 在OMDatabaes上添加了小的代理属性,用于原始asyncpg连接

0.1.8

  • Yaml数据导入器

0.1.7

  • 支持添加基本继承模型

0.1.6

  • 查询应该是一个异步迭代器

0.1.5

  • 加载继承模型。

0.1.4

  • 查询(Object).get如果未找到应返回None

0.1.3

  • 修复和改进。布局基本API

0.1.0 (2019-04-07)

  • 首次发布于PyPI。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

asyncom-0.3.3.tar.gz (11.5 kB 查看散列)

上传时间 源代码

由以下支持