zoukankan      html  css  js  c++  java
  • Django_orm脚本

    1.配置脚本
    2.django终端打印出sql语句
    3.一般查询
    4.求和,求平均数,计数等
    5.annotate
    6.extra
     
     
    1.配置脚本
    # 新建一个.py文件
     
    import os
     
    if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "untitled.settings")  # 这里需要注意:1.MODULE; 2.django-project.settings
    import django
    django.setup()
     
    2.django终端打印出sql语句
    # settings.py
    即为你的Django项目配置上一个名为django.db.backends的logger实例即可查看翻译后的SQL语句。
     
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console':{
                'level':'DEBUG',
                'class':'logging.StreamHandler',
            },
        },
        'loggers': {
            'django.db.backends': {
                'handlers': ['console'],
                'propagate': True,
                'level':'DEBUG',
            },
        }
    }
     
    3.一般查询
    from app01 import models
     
    ret = models.Employee.objects.all().values('name', 'dept')
    SELECT `employee`.`name`, `employee`.`dept` FROM `employee` LIMIT 21; args=()
     
    4.求和,求平均数,计数等等
    from app01 import models
    from django.db.models import Avg,Sum,Min,Max,Count
     
    5.annotate
    from app01 import models
    from django.db.models import Avg,Sum,Min,Max,Count
     
    # annotate前面是什么,就按照什么分组。如all().annotate()就是按照id分组;values('age').annotate()就是按照年龄分组
    ret = models.Employee.objects.values('dept').annotate(a=Avg('salary')).values('dept', 'a')
    SELECT `employee`.`dept`, AVG(`employee`.`salary`) AS `a` FROM `employee` GROUP BY `employee`.`dept` ORDER BY NULL LIMIT 21; args=()
     
    6.extra(添加条件:工资大于3000)
    from app01 import models
     
    ret = models.Employee.objects.all().extra(
        select= {
            'gt': 'salary > 3000'
        }
    )
    print(ret)
    for i in ret:
        print(i.name, i.gt)
     
    # SELECT (salary > 3000) AS `gt`, `employee`.`id`, `employee`.`name`, `employee`.`age`, `employee`.`salary`, `employee`.`dept` FROM `employee`; args=()
    python 0    django 1    js 1
    # 执行原生SQL
    # 更高灵活度的方式执行原生SQL语句
    from django.db import connection, connections
    cursor = connection.cursor()   # cursor = connections['default'].cursor()
    cursor.execute("""SELECT * from employee where salary > %s""", [3000])  # 也可以id=? 或salary < ?
    row = cursor.fetchall()
    print(row)
     
    SELECT * from employee where salary > 3000; args=[3000]
    ((2, 'django', 20, 5000, '框架部'), (3, 'js', 600, 20000, '编程部'))
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Springboot启动前执行方法
    UUID
    vue
    前端进阶
    动态代理
    c# 对接微信公众号JSSDK使用wx.uploadImage 上传图片,后台从微信服务器上下载的图片有问题损坏的解决办法
    浏览器数据库 IndexedDB基础使用
    使用Java命令行编译和打包jar
    ArcGIS JS API 路径回放
    基于Quick_SLPK_Server的NodeJs版I3S服务发布
  • 原文地址:https://www.cnblogs.com/changwoo/p/9603559.html
Copyright © 2011-2022 走看看