面向命令行的ORM。
项目描述
clirm
命令行ORM(clirm)是一个库,可用于创建简单的ORM,在交互式环境中允许用户操作对象,并且定期运行遍历整个数据库的脚本。
功能包括
- 更改总是立即提交到数据库,因此无需担心单独的后续“保存”步骤。
- 每行只有一个对象,因此用户无需担心编辑一个副本而另一个ORM对象对应的同一行未更改。
- 行中的所有列总是一起检索,以简化上述点的实现。
- 与类型系统的紧密集成。字段可以声明为
Field[T]()
,其中T
是正常的Python类型。
Clirm要求每个表都有一个包含唯一标识符的id
列。
用法
例如,我们将创建一个包含动物分类的简单数据库
import enum
import sqlite3
from typing import Self
from clirm import Clirm, Field, Model
class Status(enum.Enum):
living = 1
recently_extinct = 2
fossil = 3
CLIRM = Clirm(sqlite3.connect("taxon.db"))
class Taxon(Model):
clirm = CLIRM
clirm_table_name = "taxon"
name = Field[str]() # string field
status = Field[Status]() # enum field
common_name = Field[str | None]() # nullable string field
parent = Field[Self | None]() # foreign key to self; can also write "Taxon | None"
if __name__ == "__main__":
txn1 = Taxon.create(
name="Mammalia", status=Status.living, common_name="Mammals"
)
txn2 = Taxon.create(
name="Rodentia", status=Status.living, common_name="Rodents",
parent=txn1
)
tnx3 = Taxon.create(
name="Multituberculata", status=Status.fossil, parent=txn1
)
living_taxa = Taxon.select().filter(Taxon.status == Status.living)
assert living_taxa.count() == 2
assert {txn.common_name for txn in living_taxa} == {"Mammals", "Rodents"}
for txn in living_taxa:
txn.common_name = txn.common_name + "!"
# Change is immediately visible
assert txn1.common_name == "Mammals!"
支持类型
当前支持以下字段类型
- 原始类型,例如
int
、str
、bool
,它们直接传递到数据库 - 枚举,它们在传递到数据库之前转换为它们的值
- 指向其他clirm模型的键,它们以它们的ID存储
- 指向当前类的键,可以用
typing.Self
表示 - 上述任何类型的可空版本,通过在类型中添加
| None
表示
可以通过从Field
派生并重写deserialize
和serialize
方法来支持额外的类型。
后端
目前仅支持SQLite作为后端。
变更日志
版本 0.1(2024年4月8日)
- 首次发布
关闭
clirm-0.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9afb9e7cdb8c6da8fc9e3dd5f40c6754bcd108c4d2056d13e6cd747271e4ac4b |
|
MD5 | 25ed1da6294b4319e5eeeed81246381f |
|
BLAKE2b-256 | 4c476f7d4150223e869967250c16a7f77b0db4daf767906942b717d17e3b8ed6 |
关闭
clirm-0.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b124f692e09f95e00d49d8d89aa3169902e999a4b160bbd7e75afd3f051d9ac3 |
|
MD5 | 794db4a035cb7a5a5033177af5102e4f |
|
BLAKE2b-256 | 096336aedfd68fbdc26d3f714a019a8dc75be7d6c9415cdfa447cc226d45f496 |