基于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的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 4857b40accf54097a60cfb86dcfc721ae62dd88c683809c1a2733caec0b45cac |
|
MD5 | e855f655cce7ab83109b6e6a057ac931 |
|
BLAKE2b-256 | 5e2d90aa17b48290edae53e98395fbf1862c4d3d8be0fdafcb89b08e875175e7 |