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第三方库


热门话题
javascript通过WebSocket将服务器时间推送到多个客户端   这种java字节转换是如何工作的   数据库错误。sql。SQLEception:参数索引超出范围(1>参数数,为0)   java如何在搜索时过滤选定的viewpager片段中的recyclerview?   java如何使用OpenCV将图像转换为黑白图像并在ANDROID中消除阴影   Spring MVC项目中的java HTTP服务器状态404错误   Spring MVC中的java JSR303自定义约束验证器   java如何基于另一个ArrayList的值显示ArrayList中的特定项?   java如何在firebase messages节点获取最后发送给我的消息?   部署后在google app engine上运行servlet时发生java错误   java如何使用servlet在两个jsp之间发送数据   java日历年中的周是月中的周   从URL读取一个资源并直接返回这些字节作为REST请求的响应,Java 7和spring MVC 3.2不存储内存