【问题标题】:Django model read and create in a query?Django模型在查询中读取和创建?
【发布时间】:2015-12-30 06:57:04
【问题描述】:

我想根据模型的最后一个 id 在 Django 模型中插入一行。我的查询是这样的,

Order.objects.create(group=123131, identifier=friendly_invoice.encode(Order.objects.last().id))
# group and identifier are unique together

我记录了http://www.dabapps.com/blog/logging-sql-queries-django-13/中所示的查询,

(0.016) SELECT `order`.`id`, `order`.`group`, `order`.`identifier`, `order`.`created`, `order`.`modified` FROM `order` ORDER BY `order`.`id` DESC LIMIT 1; args=()
DEBUG 2015-12-30 12:16:21,881 (0.016) SELECT `order`.`id`, `order`.`group`, `order`.`identifier`, `order`.`created`, `order`.`modified` FROM `order` ORDER BY `order`.`id` DESC LIMIT 1; args=()
DEBUG 2015-12-30 12:16:21,881 (0.016) SELECT `order`.`id`, `order`.`group`, `order`.`identifier`, `order`.`created`, `order`.`modified` FROM `order` ORDER BY `order`.`id` DESC LIMIT 1; args=()
(0.000) INSERT INTO `order` (`group`, `identifier`, `created`, `modified`) VALUES ('123131', '378ETGY', '2015-12-30 06:46:21', '2015-12-30 06:46:21'); args=[u'123131', '378ETGY', u'2015-12-30 06:46:21', u'2015-12-30 06:46:21']
DEBUG 2015-12-30 12:16:21,881 (0.000) INSERT INTO `order` (`group`, `identifier`, `created`, `modified`) VALUES ('123131', '378ETGY', '2015-12-30 06:46:21', '2015-12-30 06:46:21'); args=[u'123131', '378ETGY', u'2015-12-30 06:46:21', u'2015-12-30 06:46:21']
DEBUG 2015-12-30 12:16:21,881 (0.000) INSERT INTO `order` (`group`, `identifier`, `created`, `modified`) VALUES ('123131', '378ETGY', '2015-12-30 06:46:21', '2015-12-30 06:46:21'); args=[u'123131', '378ETGY', u'2015-12-30 06:46:21', u'2015-12-30 06:46:21']

这是在 db 中创建两个 sql 查询。如果这段代码由两个并行请求执行,我相信这会出错。

如何以更安全的方式编写此查询?

【问题讨论】:

  • 我想我们需要更多关于friendly_invoice的信息。
  • 这是一个将 id 加密为字母数字值的函数。它对用户隐藏 id 并向他/她显示一个字母数字字符串。
  • 每次必须进行查询时,您是否进行解码和编码?我觉得这里有一个更大的问题。
  • 没有。它仅用于显示用户。内部 id 无处不在。

标签: python sql django


【解决方案1】:

我使用https://docs.djangoproject.com/en/1.7/topics/db/transactions/#savepoints解决了这个问题

from django.db import transaction

# open a transaction
@transaction.atomic
def viewfunc(request):
   ...

【讨论】:

    猜你喜欢
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 2017-08-10
    • 2015-07-13
    相关资源
    最近更新 更多