轻量级python数据映射器orm(对象关系映射器)。

ascetic的Python项目详细描述


苦行僧作为Python的超级轻量级数据映射器ORM(对象关系映射器)存在。

基于Data Mapper模式的苦行僧。 它还支持“Active Record”模式,但仅作为包装器,模型类完全没有任何服务逻辑。 苦行僧遵循KISS principle。 从数据库中自动填充字段(请参阅下面的示例)并最小化大小。 不必指定类中的列。这遵循DRY原则。 尽可能小的苦行虫。

在Ascetic.contrib(目前正在开发)中,您可以找到下一个解决方案:

所有扩展都支持复合主键/外键。

默认情况下,“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.webBottleTornadopysi,等等。

其他项目

另请参见:

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

推荐PyPI第三方库


热门话题
H2数据库抛出一般错误:“java.lang.IllegalStateException:无法读取位置2199023614787处的页面   java MySql对动态创建的表的查询   java如何交换两个整数包装器对象   java如何同时侦听命令行和2个传入连接   数据绑定JAVA Windows Builder自动绑定JLabel,并在TimerTask中更新bean   使用简单的代码在Java或Python上创建一个Hour Glass模式?   java在Velocity中写入Springbound映射   java在通过socket接收序列化对象时获取ClassNotFoundException   java双字段索引   java如何将可变字节数组传递给DLL函数(通过JNA访问)?   安卓 java。lang.RuntimeException:无法启动活动   删除正则表达式Java后面的所有字符   在Java GUI中旋转方形面板   java为什么“返回错误”只适用于异常?   java无法在Install4J中的选择捆绑包选项中找到JRE   java为什么我不断收到无法解析符号片段活动的错误?   java Javafx gui没有出现,其他一切运行正常   java让设备以编程方式连接到安卓中的同一wifi网络?   java如何在运行时获取“colorControlHighlight”属性的值?