小编Kev*_*sco的帖子

Django中DateTime字段之间的聚合差异

我有一个表,其中包含一系列与时间段相关的条目(具体来说,是为客户工作的时间):

task_time:
id     |    start_time    |    end_time       |    client (fk)
1        08/12/2011 14:48   08/12/2011 14:50     2
Run Code Online (Sandbox Code Playgroud)

我试图从我的Django应用程序聚合给定客户端的所有工作时间:

time_worked_aggregate = models.TaskTime.objects.\
                        filter(client = some_client_id).\
                        extra(select = {'elapsed': 'SUM(task_time.end_time - task_time.start_time)'}).\
                        values('elapsed')

if len(time_worked_aggregate) > 0:
    time_worked = time_worked_aggregate[0]['elapsed'].total_seconds()
else:
    time_worked = 0
Run Code Online (Sandbox Code Playgroud)

这似乎不优雅,但确实有效.或者至少我认为:事实证明它在PostgreSQL数据库上工作正常,但当我转移到SQLite时,一切都会消失.

一点挖掘表明,其原因是DateTimes不是SQLite中的一流数据.以下原始SQLite查询将完成我的工作:

SELECT SUM(strftime('%s', end_time) - strftime('%s', start_time)) FROM task_time WHERE ...;
Run Code Online (Sandbox Code Playgroud)

我的问题如下:

  • 上面的Python示例似乎很迂回.我们能更优雅地做到这一点吗?
  • 更重要的是,在这个阶段,我们能否以一种适用于Postgres和SQLite的方式实现?理想情况下,我不想编写原始SQL查询并切换恰好存在的数据库后端; 在一般的,Django是在保护我们从这个非常好.Django对此操作有合理的抽象吗?如果没有,对我来说在后端进行条件切换有什么明智的方法?

我应该提一下,数据集是数千个条目; 以下不太实际:

sum([task_time.end_date - task_time.start_date for task_time in models.TaskTime.objects.filter(...)])
Run Code Online (Sandbox Code Playgroud)

sqlite django postgresql orm aggregate

8
推荐指数
2
解决办法
4736
查看次数

使用 Python 在 Visual Studio Code 中显示重写的方法指示器

在 Visual Studio Code 中使用 Python 编程时,有没有办法显示重写方法的指示符?

我正在寻找与 PyCharm 在重写超类方法时显示的左侧空白处的图标类似的内容?

python visual-studio-code

8
推荐指数
1
解决办法
1554
查看次数

谷歌 Colab 中的代码格式化,如 autopep8 或 Jupyter 的黑色

我只是使用 Google Colab 进行研究和学习机器学习,但有一件事我仍然不知道该怎么做。如何在 Google Colab 中格式化代码?在这种情况下,我的意思是像autopep8black在 Jupyter 笔记本上,我总是弄乱我的代码,例如:

x=1.223333433
print("%3f"%x)
Run Code Online (Sandbox Code Playgroud)

将会

x = 1.223333433
print("%3f" % x)
Run Code Online (Sandbox Code Playgroud)

所以代码格式化程序会很棒,非常感谢。

python google-colaboratory

8
推荐指数
0
解决办法
386
查看次数