小编Bre*_*ser的帖子

Django使用布尔字段查询注释

假设我Product在店面中有一个带有产品的模型,以及一个ProductImages包含产品图像的表格,其中可以包含零个或多个图像.这是一个简化的例子:

class Product(models.Model):
  product_name = models.CharField(max_length=255)
  # ...

class ProductImage(models.Model):
  product = models.ForeignKey(Product, related_name='images')
  image_file = models.CharField(max_length=255)
  # ...
Run Code Online (Sandbox Code Playgroud)

在显示产品的搜索结果时,我想优先考虑具有与之关联的图像的产品.我可以轻松获得图像数量:

from django.db.models import Count
Product.objects.annotate(image_count=Count('images'))
Run Code Online (Sandbox Code Playgroud)

但这实际上并不是我想要的.我想用布尔字段对它进行注释have_images,指示产品是否有一个或多个图像,以便我可以按以下方式排序:

Product.objects.annotate(have_images=(?????)).order_by('-have_images', 'product_name')
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?谢谢!

python django orm django-queryset

32
推荐指数
3
解决办法
1万
查看次数

使用DELETE查询MySQL非常慢,查询运行时Apache很奇怪

首先,从一些细节来描述整体情况:

  • MySQL(5.1.50)数据库上有一个非常强大的(32个CPU核心,64GB RAM)FreeBSD 8.1-RELEASE机器,它也运行Apache 2.2.
  • Apache每秒平均获得约50次点击.绝大多数这些点击是针对销售平台的API调用.
  • API调用通常需要大约半秒或更短的时间来生成结果,但根据第三方的不同,最多可能需要30秒.
  • 每个API调用都在数据库中存储一行.存储在那里的信息很重要,但只有大约十五分钟,之后它必须到期.
  • 在存储API调用信息的表中(此表的模式如下),InnoDB行级锁定用于在线程之间进行同步(实际上是Apache连接)同时请求相同的信息,这经常发生.这意味着多个线程可能正在等待一行锁定最多30秒,因为API调用可能需要很长时间(但通常不会).
  • 最重要的是,最重要的是要注意一切都在正常情况下完美运行.

也就是说,这是非常高度使用的表(每秒大约500个INSERT,许多SELECT,使用行级锁定)我正在运行DELETE查询:

CREATE TABLE `sales` (
  `sale_id` int(32) unsigned NOT NULL auto_increment,
  `start_time` int(20) unsigned NOT NULL,
  `end_time` int(20) unsigned default NULL,
  `identifier` char(9) NOT NULL,
  `zip_code` char(5) NOT NULL,
  `income` mediumint(6) unsigned NOT NULL,
  PRIMARY KEY  USING BTREE (`sale_id`),
  UNIQUE KEY `SALE_DATA` (`ssn`,`zip_code`,`income`),
  KEY `SALE_START` USING BTREE (`start_time`)
) ENGINE=InnoDB DEFAULT CHARSET=ascii ROW_FORMAT=FIXED
Run Code Online (Sandbox Code Playgroud)

DELETE查询看起来是这样的,并且运行的cron每隔五分钟(我宁愿每分钟运行一次):

DELETE FROM `sales` WHERE 
    `start_time` < UNIX_TIMESTAMP(NOW() - …
Run Code Online (Sandbox Code Playgroud)

mysql apache apache2

6
推荐指数
1
解决办法
1411
查看次数

标签 统计

apache ×1

apache2 ×1

django ×1

django-queryset ×1

mysql ×1

orm ×1

python ×1