Django中的ORM转换为SQL语句日志

Posted 映辉博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django中的ORM转换为SQL语句日志相关的知识,希望对你有一定的参考价值。

如果想打印ORM转换过程中的SQL,需要在settings中进行如下配置:

 

LOGGING = 
    \'version\': 1,
    \'disable_existing_loggers\': False,
    \'handlers\': 
        \'console\':
            \'level\':\'DEBUG\',
            \'class\':\'logging.StreamHandler\',
        ,
    ,
    \'loggers\': 
        \'django.db.backends\': 
            \'handlers\': [\'console\'],
            \'propagate\': True,
            \'level\':\'DEBUG\',
        ,
    

  

将 sql 转换为 Django ORM

【中文标题】将 sql 转换为 Django ORM【英文标题】:converting sql to Django ORM 【发布时间】:2017-08-23 22:41:25 【问题描述】:

如何将此 SQL 转换为 Django ORM

SELECT 
  `table1`.*,
  `tabl2`.*
FROM `table1`
INNER JOIN `table2` ON (`table1`.`table2_id` = `table2`.`id`)
INNER JOIN
(SELECT
   table2_id,
   MAX(date) AS max_date
FROM table1
WHERE date <= CURRENT_DATE
GROUP BY table2_id) grouped
  ON table1.table2_id = grouped.table2_id
     AND table1.date = grouped.max_date
WHERE `table1`.`table2_id` IN (73, 74)
ORDER BY `table1`.`date` ASC

我尝试了注释,但不成功

【问题讨论】:

【参考方案1】:

简单地说,您需要为表定义模型,即“table1”和“table2” - 使用 ORM 的目的是将您的表定义为模型(一劳永逸)并轻松进行查询。

如果您定义了架构,请将其转换为 Django 模型(所有字段)。而且,如果您已经设置了数据库,请使用inspectdb 命令从数据库自动生成模型。

您可以为特定的数据库表生成模型 - inspectdb

检查数据库

django-admin inspectdb [table [table ...]]

自省数据库 NAME 设置指向的数据库中的表并输出 Django 模型模块(models.py 文件)到标准输出。你可以 通过将名称作为参数传递来选择要检查的表。

如果您有想要使用的旧数据库,请使用此选项 姜戈。该脚本将检查数据库并为 里面的每个表。

如您所料,创建的模型将有一个属性 表中的每个字段。请注意,inspectdb 有一些特殊情况 在其字段名输出中:

如果 inspectdb 无法将列的类型映射到模型字段类型,它将 使用 TextField 并将插入 Python 注释“此字段类型是 猜测。'生成模型中的字段旁边。

如果数据库 列名是 Python 保留字(例如 'pass'、'class' 或 'for'),inspectdb 会将 '_field' 附加到属性名称。为了 例如,如果一个表有一个列“for”,生成的模型将有 字段“for_field”,db_column 属性设置为“for”。 inspectdb 将插入 Python 注释“字段已重命名,因为它是 一个 Python 保留字。在田野旁边。


但您必须手动验证自动生成的模型:

此功能是一种快捷方式,而不是确定的模型 一代。运行后,你会想要查看生成的 自己建模以进行自定义。特别是,您需要 重新排列模型的顺序,以便引用其他模型的模型 正确订购。

【讨论】:

我已经有了这些模型,现在我想实现将这个SQL转换为Django ORM。像这个 Model1.objects.filter()

以上是关于Django中的ORM转换为SQL语句日志的主要内容,如果未能解决你的问题,请参考以下文章

Django-.模型层

django基础知识之ORM简介:

6.让ORM映射执行的时候打印SQL语句

django 模型

django-orm简记

python django -2