【发布时间】:2019-03-01 13:54:17
【问题描述】:
我有一个这样的 MySQL 视图:
VIEW `qty_sold_view` AS
SELECT
`t2`.`upc` AS `upc`, SUM(`t2`.`qty`) AS `qty_sold`
FROM
(`inventory_orders` `t1`
JOIN `inventory_sales` `t2` ON ((`t2`.`order_id` = `t1`.`id`)))
WHERE
(`t1`.`date_placed` > (CURDATE() - INTERVAL 42 DAY))
GROUP BY `t2`.`upc`
我使用 Django 原始查询对此视图运行查询:
sql = 'SELECT `upc`, `qty_sold` FROM `qty_sold_view` WHERE `upc` = 1001 OR `upc`= 1002 ...'
with connection.cursor() as con:
con.execute(sql)
请注意,inventory_orders 表和 inventory_sales 表都有一个 Django 模型,但视图本身没有。
此查询的结果如下所示:
((1001, Decimal('1')), (1002, Decimal('4')), ...)
inventory_sales的qty列和upc列都是INT类型,所以我不明白为什么数据返回为Decimal。
问题是当我尝试json.dumps这个查询的结果时,我得到了这个:
TypeError: Decimal 类型的对象不是 JSON 可序列化的
我可以使用我在网上找到的各种答案来解决这个问题,以实际 json 序列化小数,但是当它们首先不应该是小数时这样做似乎很愚蠢。
如何强制 MySQL 将它们视为 INT?
【问题讨论】:
-
只是好奇——你为什么有观点?
-
现在我考虑它没有充分的理由 xD。运行
SELECT * FROM view和运行视图作为查询之间会有性能差异吗? -
MySQL 中的视图对其底层索引的访问非常有限,因此通过取消视图可能会提高性能。
-
很高兴知道。谢谢!
标签: mysql sql django django-models