小编Ana*_*kov的帖子

如何在SQL中绕过Django自定义数据库函数调用括号?

对问题的简短介绍......

  • PostgreSQL有非常简洁的数组字段(int数组,字符串数组)和函数,就像UNNESTANY.
  • 这些字段由Django支持(我正在使用djorm_pgarray它),但函数不是本机支持的.
  • 可以使用.extra(),但Django 1.8引入了一个新的数据库功能概念.

让我提供一个最原始的例子,说明我基本上对所有这些做了些什么.A Dealer有一个它支持的品牌列表.A Vehicle有一个品牌并且与经销商相关联.但事实上它Vehicle的制作与Dealer制作清单不匹配,这是不可避免的.

MAKE_CHOICES = [('honda', 'Honda'), ...]

class Dealer(models.Model):
    make_list = TextArrayField(choices=MAKE_CHOICES)

class Vehicle(models.Model):
    dealer = models.ForeignKey(Dealer, null=True, blank=True)
    make   = models.CharField(max_length=255, choices=MAKE_CHOICES, blank=True)
Run Code Online (Sandbox Code Playgroud)

拥有经销商和制造商的数据库,我想要计算车辆制造商及其经销商制造商列表所匹配的所有车辆.这就是我避免的方式.extra().

from django.db.models import functions

class SelectUnnest(functions.Func):
    function = 'SELECT UNNEST'

...

Vehicle.objects.filter(
    make__in=SelectUnnest('dealer__make_list')
).count()
Run Code Online (Sandbox Code Playgroud)

结果SQL:

SELECT COUNT(*) AS "__count" FROM "myapp_vehicle" 
INNER JOIN "myapp_dealer" 
  ON ( "myapp_vehicle"."dealer_id" = "myapp_dealer"."id" ) 
WHERE …
Run Code Online (Sandbox Code Playgroud)

python django postgresql django-orm

9
推荐指数
1
解决办法
580
查看次数

在 Python 中解析人类可读的重复日期

问题。在我的 Django 应用程序中,用户为计划执行创建任务。用户是非常非技术性的,如果他们能编写传统的人类可读的表达式来定义何时执行某些任务,那就太好了,例如:

  • 每逢星期一
  • 每周五、周三
  • 日常的
  • 每月 1、14、20 日
  • 每周五;每个月底

这是受Todoist 的启发。目前,只需要日期;没有时间。我花了几个小时在谷歌上搜索图书馆来做到这一点,但没有运气。我期待一个函数,比如说in_range(expression, date),这样:

>>> in_range('every monday, wednesday', date(2014, 4, 28))
True

>>> in_range('every end of month', date(2014, 5, 12))
False

>>> in_range('every millenium', date(2014, 5, 8))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: unknown token "millenium".
Run Code Online (Sandbox Code Playgroud)

变体。这就是我看过的。

  • 标准datetime库进行日期解析,但不进行上述日期范围解析。
  • Python-dateutil - 通过 支持重复日期rrule,非常实用,但仍然不支持解析。
  • Python-crontabPython-croniter接受标准的 Unix crontab 语法(并允许指定工作日等),但这种语法仍然过于技术性,如果可能,我想避免它。
  • ArrowParsedatetime不支持该功能。

那么,是否有我错过的 Python …

python django date python-datetime python-dateutil

5
推荐指数
1
解决办法
1563
查看次数