轻量级python数据映射器orm(对象关系映射器)。
ascetic的Python项目详细描述
苦行僧作为Python的超级轻量级数据映射器ORM(对象关系映射器)存在。
- 主页:https://bitbucket.org/emacsway/ascetic
- 文件:https://ascetic.readthedocs.io/
- 浏览源代码(规范回购):https://bitbucket.org/emacsway/ascetic/src
- Github镜像:https://github.com/emacsway/ascetic
- 获取源代码(规范回购):git clone https://bitbucket.org/emacsway/ascetic.git
- 获取源代码(镜像):git clone https://github.com/emacsway/ascetic.git
- 圆周率:https://pypi.python.org/pypi/ascetic
基于Data Mapper模式的苦行僧。 它还支持“Active Record”模式,但仅作为包装器,模型类完全没有任何服务逻辑。 苦行僧遵循KISS principle。 从数据库中自动填充字段(请参阅下面的示例)并最小化大小。 不必指定类中的列。这遵循DRY原则。 尽可能小的苦行虫。
在Ascetic.contrib(目前正在开发)中,您可以找到下一个解决方案:
- 多语言
- 多态关系
- 多态模型(支持“Single Table Inheritance”、“Concrete Table Inheritance”和“Class Table Inheritance”aka django“Multi-table inheritance”)
- 处理树结构的“物化路径”实现
- 版本控制(只存储差异,不存储内容副本)
所有扩展都支持复合主键/外键。
默认情况下,“Identity Map”具有可序列化的隔离级别。
什么苦行虫不知道? Ascetic ORM不进行任何数据类型转换(使用诸如this之类的连接功能),并且没有“Unit of Work”。 如果需要这些特性,我建议使用Storm ORM。
Ascetic ORM是在麻省理工学院的许可下发布的(详见许可文件)。
这个项目目前正在开发中,不稳定。 如果你正在寻找稳定的吻型orm,请注意Storm ORM。
PostgreSQL示例
使用这些表格:
CREATE TABLE ascetic_tests_models_author ( id serial NOT NULL PRIMARY KEY, first_name VARCHAR(40) NOT NULL, last_name VARCHAR(40) NOT NULL, bio TEXT ); CREATE TABLE books ( id serial NOT NULL PRIMARY KEY, title VARCHAR(255), author_id integer REFERENCES ascetic_tests_models_author(id) ON DELETE CASCADE );
您可以通过以下一种方式进行配置:
一。将您的设置放入pythonpath文件ascetic_settings.py。 有关详细信息,请参见文件ascetic/settings.py。
2.在环境变量Ascetic设置中定义设置模块。
三。调用ascetic.settings.configure(),例如:
import ascetic.settings.configure ascetic.settings.configure({ 'DATABASES': { 'default': { 'engine': "postgresql", 'user': "devel", 'database': "devel_ascetic", 'password': "devel", 'debug': True, 'initial_sql': "SET NAMES 'UTF8';", } } })
我们像这样设置对象:
from ascetic.model import Model from ascetic.mappers import get_mapper from ascetic.relations import ForeignKey, OneToMany class Author(Model): class Mapper(object): defaults = {'bio': 'No bio available'} validations = {'first_name': ( lambda v: len(v) > 1 or "Too short first name", lambda self, key, value: value != self.last_name or "Please, enter another first name", )} class Book(Model): author = ForeignKey(Author, related_name='books') class Mapper(object): db_table = 'books'
现在我们可以在数据库中创建、检索、更新和删除条目。 创建
james = Author(first_name='James', last_name='Joyce') get_mapper(Author).save(james) # Datamapper way u = Book(title='Ulysses', author_id=james.id) u.save() # Use ActiveRecord wrapper
检索
a = Author.get(1) a.first_name # James a.books # Returns list of author's books # Returns a list, using LIMIT based on slice a = Author.q[:10] # LIMIT 0, 10 a = Author.q[20:30] # LIMIT 20, 10
更新
a = Author.get(1) a.bio = 'What a crazy guy! Hard to read but... wow!' a.save()
删除
a.delete()
SQLBuilder集成
object_list = Book.q.tables( (Book.s & Author.s).on(Book.s.author_id == Author.s.id) ).where( (Author.s.first_name != 'James') & (Author.s.last_name != 'Joyce') )[:10]
基于sqlbuilder.smartsql的查询对象,请参见more info。
信号支持
- 初始化前
- 初始化后
- 预存
- 后置保存
- 预删除
- 删除后
- 课堂准备
更多信息
查看文档中的更多信息:https://ascetic.readthedocs.io/
网络
你可以在轻量级的web框架中使用asticorm,比如wheezy.web,Bottle,Tornado,pysi,等等。
其他项目
另请参见:
- Storm(来自类的属性)-优秀而简单的orm!
- 文章(英文)“Why I prefer Storm ORM for Python”
- 文章(俄语)“Почему я выбираю Storm ORM для Python”
- 文章(英文)“Implementation of Repository pattern for browser’s JavaScript”
- 文章(俄语)“Реализация паттерна Repository в браузерном JavaScript”
- SQLAlchemy(来自类或数据库的方案,请参见“autoload”选项)
- Openorm(轻量级数据映射器),miror
- SQLObject(来自类或数据库的方案,请参阅“from database”选项)
- Peewee(来自类的方案)
- Bazaar ORM
- Twistar(来自数据库的scheme),提供异步数据库交互
- Activemodel(来自数据库的方案)
- ActiveRecord类似于200行以下的orm(来自数据库的scheme)
- A Query Language extension for Python:使用内置查询语言查询文件、对象、sql和nosql数据库
- simpleql只使用python构建查询的sql表
- Generator expressions用于数据库请求(python配方
- Object Relational Mappers (ORMs)