django的一个小程序包,用于根据模型定义和queryset轻松创建临时表

django-storedqueries的Python项目详细描述


Author:Keryn Knight
Version:0.1.4

一个小型的Django包,用于简化数据库临时表的创建。

它不需要在您的INSTALLED_APPS

用法

定义一个基本正常的django模型,如下所示:

from django.db import models

class MyCoolModel(models.Model):
    value = models.PositiveIntegerField(primary_key=True)

    class Meta:
        abstract = True
        managed = False

请特别注意Meta属性。否则它会抱怨的。

提供临时表的定义:

from storedqueries import TemporaryTable

class MyTemporaryTable(TemporaryTable):
    model = MyCoolModel
    queryset = Somedata.objects.order_by('?').annotate(value=models.F('key_name')).values_list('value').iterator()

使用临时表:

from django.http import JsonResponse

def myview(request, *args, **kwargs):
    with MyTemporaryTable() as TemporaryModel:
        keys = TemporaryModel.objects.all()
        data = tuple(Somedata.objects.filter(key_name__in=keys))
        return JsonResponse({'values': data})

使用with my_cls() as thing:语法将创建一个唯一命名的 使用queryset连接和数据填充的临时表, 当with作用域关闭时,将删除临时表。这个 TemporaryModel变量将是MyCoolModel子类 临时表的唯一名称。

如果有无法在模块范围内定义的查询,可以执行以下操作:

class MyTemporaryTable(TemporaryTable):
    model = MyCoolModel
    def source_queryset(self):
        return Somedata.objects.filter(created__lte=timezone.now()).annotate(value=models.F('key_name')).values_list('value').iterator()

如果仍然无法获得正确的查询,因为它具有依赖项 在request.useretc之类的东西上,您可以做到:

def myview(request, *args, **kwargs):
    qs = Somedata.objects.filter(user=request.user.pk)
    with MyTemporaryTable(queryset=qs) as TemporaryModel:
        raise NotImplementedError("Dynamic queryset binding")

甚至可能:

def myview(request, *args, **kwargs):
    qs = Somedata.objects.filter(user=request.user.pk)
    with TemporaryTable(model=MyCoolModel, queryset=qs) as TemporaryModel:
        raise NotImplementedError("Dynamic model AND queryset binding")

许可证

FreeBSD。在存储库的根目录和任何存档中都应该有一个LICENSE文件。


版权所有(c)2019,Keryn Knight 保留所有权利。

在满足以下条件的情况下,允许以源代码和二进制格式重新分发和使用(无论是否修改):

  1. 源代码的重新发布必须保留上述版权声明、此条件列表和以下免责声明。
  2. 以二进制形式重新分发必须在分发时提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。

此软件由著作权人和出资人提供,如“是”,任何明示或默示保证,包括但不限于,适销性和适合特定目的的默示保证。在任何情况下,版权持有人或贡献者均不对任何直接、间接、附带、特殊、惩戒性或后果性损害(包括但不限于替代货物或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论其原因如何,也不论其责任理论是否在合同中,严格责任,或因使用本软件而产生的侵权行为(包括疏忽或其他),即使被告知此类损害的可能性。


Django StoredQueries的更改历史记录

0.1.4

  • 更改了TemporaryTableEditoropenclose方法,以避免将游标用作上下文管理器以获得更高的兼容性(即:我有一个旧的内部项目,这可能有用)

0.1.3

  • 如果在delaresForeignKeyetc中传递的临时模型没有为每个模型设置related_name="+"etc,则在运行时引发异常。
  • 添加mysql的功能来检测它是否可以使用MEMORY引擎。

0.1.2

  • 初始版本

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

推荐PyPI第三方库


热门话题
java Apache Flink外部Jar   创建和强制转换对象数组时发生java错误   Java,添加数组   具有相同包结构和类的java JAR   java Jenkins未能构建Maven项目   java为什么一个forloop比另一个更快,尽管它们做的“一样”?   servlets在将“/”站点迁移到Java EE包时处理contextpath引用   无法解析java MavReplugin:2.21或其某个依赖项   泛型如何编写比较器来泛化Java中的两种类型的对象?   java Android Emulator未在netbeans上加载   多线程Java使用线程对数组中的数字求和:在同步块中使用新变量作为锁:差异   java如何在JSP/servlet中设置<input>标记的值?