处理数据库视图。允许为数据库视图创建迁移。使用 django 代码查看迁移。它们可以颠倒过来。自动检测模型视图定义的变化。支持几乎所有选项作为常规 makemigrations 命令
项目描述
django-db-views
:备忘录: | 执照 | |
:包裹: | 派皮 | |
Django 版本 | 2.2 到 4.0 | |
Python 版本 | 3.6 至 3.10 |
如何安装?
pip install django-db-views
我们提供什么
- 数据库视图
- 物化视图
- 查看架构迁移
- 物化视图的索引(未来)
- 数据库表函数(未来)
如何使用?
- 添加
django_db_views
到INSTALLED_APPS
- 使用
makeviewmigrations
命令为视图模型创建迁移
如何在数据库中创建视图?
-
要使用 DBView 类创建视图,请记住设置视图定义属性。
from django.db import models from django_db_views.db_view import DBView class VirtualCard(models.Model): ... class Balance(DBView): virtual_card = models.ForeignKey( VirtualCard, # VirtualCard is a regular Django model. on_delete=models.DO_NOTHING, related_name='virtual_cards' ) total_discount = models.DecimalField(max_digits=12, decimal_places=2) total_returns = models.DecimalField(max_digits=12, decimal_places=2) balance = models.DecimalField(max_digits=12, decimal_places=2) view_definition = """ SELECT row_number() over () as id, # Django requires column called id virtual_card.id as virtual_card_id, sum(...) as total_discount, ... """ class Meta: managed = False # Managed must be set to False! db_table = 'virtual_card_balance'
-
视图定义可以是:str/dict或返回str/dict的可调用对象。
可调用视图定义示例:
from django_db_views.db_view import DBViewl class ExampleView(DBView): @staticmethod def view_definition(): return str(SomeModel.objects.all().query) # OR view_definition = lambda: str(SomeModel.objects.all().query) class Meta: managed = False db_table = 'example_view'
使用 callable 允许您使用 ORM 编写视图定义。
-
确保包含
managed = False
在 DBView 模型的 Meta 类中,以防止 Django 创建它自己的迁移。
视图迁移如何工作?
- DBView 作为常规 django 模型工作。您可以在任何查询中使用它。
- 它使用 Django 代码,视图迁移看起来像常规迁移。
- 它依赖于
db_table
名称。 makeviewmigrations
命令查找以前的迁移以供查看。- 如果没有这样的迁移,则脚本创建一个新的迁移
- 如果存在先前的迁移但未
view_definition
检测到任何更改,则不执行任何操作 - 如果存在先前的迁移,则脚本将使用先前
view_definition
的进行向后操作,并创建新的迁移。 - 运行时,它将检查 django.settings 中定义的当前默认引擎是否与定义视图的引擎相同
多数据库支持
Yoy 可以将 view_definition 定义为多种引擎类型的字典。
如果你没有传入一个引擎并且有一个 str 或 callable 引擎将被默认为 django 中定义的默认数据库。
它尊重 migrate 命令中的 --database 标志,因此您可以使用引擎键为特定数据库定义特定的视图定义。如果键与您当前的数据库不匹配,将跳过视图迁移。
此外,如果您为本地/开发/登台/生产使用不同的引擎,该功能将变得有用。
示例字典视图定义:
view_definition = {
"django.db.backends.sqlite3": """
SELECT
row_number() over () as id,
q.id as question_id,
count(*) as total_choices
FROM question q
JOIN choice c on c.question_id = q.id
GROUP BY q.id
""",
"django.db.backends.postgresql": """
SELECT
row_number() over () as id,
q.id as question_id,
count(*) as total_choices
FROM question q
JOIN choice c on c.question_id = q.id
GROUP BY q.id
""",
}
物化视图
只是继承DBMaterializedView
而不是常规DBView
Materialzied View 提供了一个额外的类方法来刷新视图,称为refresh
笔记
请使用最新版本。0.1.0 版本具有向后不兼容性,这在 0.1.1 及更高版本中得到解决。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
django-db-views-0.1.3.tar.gz
(17.2 kB
视图哈希)
内置分布
django_db_views-0.1.3-py3-none-any.whl
(21.7 kB
查看哈希)
关
django_db_views -0.1.3-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | af8f257ede780a927f5063ebaa0572d63584dd687e5a4af1384583fa023ca3d9 |
|
MD5 | 1dae97e773031d9f083bea5606698694 |
|
布莱克2-256 | c6791de356bf543b5c662a21d2f2e2956406aea986180035bf3f00c193b1f9f0 |