跳转到主要内容

SQLAlchemy为您的Django模型

项目描述

Aldjemy Logo

Downloads License Continuous Integration results

Aldjemy将SQLAlchemy集成到现有的Django项目中,帮助您构建Django ORM难以实现的复杂查询。

虽然其他库使用SQLAlchemy反射来生成SQLAlchemy模型,但Aldjemy通过反射Django模型来生成SQLAlchemy模型。这使得您能更好地控制哪些表属性被访问。

安装

aldjemy添加到您的INSTALLED_APPS。Aldjemy将自动为所有模型添加一个sa属性,它是一个SQLAlchemy Model

示例

User.sa.query().filter(User.sa.username=='Brubeck')
User.sa.query().join(User.sa.groups).filter(Group.sa.name=="GROUP_NAME")

显式连接是SQLAlchemy哲学的一部分,因此不要期望Aldjemy是Django ORM的直接替代品。相反,您应该使用Aldjemy来帮助处理特殊情况。

设置

您可以通过 ALDJEMY_DATA_TYPES 设置参数添加自己的字段类型,将 Django 类型映射到 SQLAlchemy 类型。参数必须是一个 dict,键是 field.get_internal_type() 的结果,值必须是一个单参数函数。您可以参考 aldjemy.table 获取灵感。

还可以使用 ALDJEMY_ENGINES 设置参数扩展/覆盖支持的 SQLALCHEMY 引擎列表。参数应是一个 dict,键是 Django 数据库引擎设置中最后一个点之后的子串(例如,从 django.db.backends.sqlite3 中的 sqlite3),值是用于连接的 SQLAlchemy 驱动(例如,sqlitesqlite+pysqlite)。如果您想使用 django-postgrespool,这可能会很有用。

混合

通常 Django 模型具有帮助函数和属性,这些函数和属性有助于表示模型的数据(例如 __str__),或表示基于模型的一些逻辑。

要将这些方法与 aldjemy 模型集成,您可以将其放入一个单独的混合类中

class TaskMixin:
    def __str__(self):
        return self.code

class Task(TaskMixin, models.Model):
    aldjemy_mixin = TaskMixin
    code = models.CharField(_('code'), max_length=32, unique=True)

太棒了!您可以在 aldjemy 类中使用 __str__,因为这个混合类将被混合到生成的 aldjemy 模型中。

如果您想公开所有方法和属性而不创建单独的混合类,您可以使用 aldjemy.meta.AldjemyMeta 元类

class Task(models.Model, metaclass=AldjemyMeta):
    code = models.CharField(_('code'), max_length=32, unique=True)

    def __str__(self):
        return self.code

结果与上面的例子相同,只是您根本不需要创建混合类。

发布流程


  1. 提交包含更新更改日志和项目版本号的 Pull Request

    poetry version (major|minor|patch) # choose which version to bump
  2. 一旦拉取请求被合并,在网页控制台或使用 github cli 创建与同一版本相同的 github 发布。

    gh release create
  3. 享受吧!

项目详情


下载文件

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

源分布

aldjemy-2.6.tar.gz (10.6 kB 查看哈希值)

上传时间

构建分布

aldjemy-2.6-py3-none-any.whl (10.4 kB 查看哈希值)

上传时间 Python 3

由以下支持