zoukankan      html  css  js  c++  java
  • Django_mysql表查询

    Django之orm内部查询语句:
    单表查询的13太子:
    1 all() :查询全部
    2 filter() :过滤
    3 get() :获取
    4 reverse() :翻转
    5 order_by() :排序
    6 exclude() :排除
    7 values() :
    8 values_list() :
    9 count() :
    10 distinct() : 去重
    11 exists() :判断
    12 first() :第一个
    13 last() :最后一个

    """
    查看orm内部的sql语句的方法有:
    1:如果是querySet对象,那么可以点query直接查看这个querySet的内部语句
    2:在Django项目的配置文件中,配置一下参数就可以实现所有的在orm查询的时候
    自动打印对应的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',
    },
    }
    }


    """
    ORM之倚天屠龙---->:双下划綫
    1.首先我们先创建一个Django项目,在设置里面把默认的Django数据库更改成MySQL数据库,以及pycharm连接mysql
    ps:牢记一定项目文件夹或者app文件夹下面的__init__.py文件里面配置让Django改变使用mysql
    配置参数如下:
    import pymysql
    pymysql.install_as_MySQLdb()
    ps:一定一定一定要记住
    2.在modles.py文件设置表:
    具体代码如下:

    from django.db import models
    
    
    # Create your models here.
    
    
    # 图书表
    class Book(models.Model):
        title = models.CharField(max_length=255)
        # 书名
        price = models.DecimalField(max_digits=8, decimal_places=2)
        # 价格
        publish_date = models.DateField(auto_now_add=True)
        # 出版时间
    
        stock = models.IntegerField()
        # 库存
        sales = models.IntegerField()
        # 销售
        publish = models.ForeignKey(to='Publish')  # 默认外键连接出版社的主键ID
        # 出版社
        author = models.ManyToManyField(to="Author")  # 多连接多, 创建一张虚拟字段,自动创建一张虚拟表, 可以帮助orm跨表查询
    
        # 作者
    
        def __str__(self):
            return self.title
    
    
    # 出版社表
    class Publish(models.Model):
        # 出版社名字
        name = models.CharField(max_length=32)
        # 出版社地址
        addr = models.CharField(max_length=64)
    
        def __str__(self):
            return self.name
    
    
    # 作者
    class Author(models.Model):
        # 名字
        name = models.CharField(max_length=32)
        # 年龄
        age = models.IntegerField()
        # 作者详情
        author_detail = models.OneToOneField(to='AuthorDetail')
    
        def __str__(self):
            return self.name
    
    
    # 作者详情
    class AuthorDetail(models.Model):
        phone = models.BigIntegerField()
        address = models.CharField(max_length=255)
    
        def __str__(self):
            return self.address
    
    
    ps:设计完所有表进行命令行:
    1:记录python3 manage.py makemigrations
    2: 同步数据库: python3 manage.py migrate
    这样才能创建表
    

      

    ###########################创建表代码结束######################################
    &单表习题:
    1.查询价格大于200的书籍:<__gt>
    models.Book.objects.filter(price__gt=200) # __gt=数值
    内部的sql语句是:
    select * from 表名 where 判断条件

    2.查询价格小于200的书籍:<__lt>
    models.Book.objects.filter(price__lt=200) # __lt=数值
    内部的sql语句是:
    select * from 表名 where 判断条件
    3.查询价格大于等于200的书籍:<__gte>
    4.查询价格小于等于200的书籍:<__lte>
    5.查询价格要么是200,或者是300,要么是666.66: <__in>
    models.Book.objects.filter(price__in=[200,300,666.66])
    6.查询价格在200到800之间的: __range
    models.Book.objects.filter(price__range=(200,800))
    7.查询书名里面带“某某字”:
    models.Book.objects.filter(title__contains='p') # 仅仅只能拿小写p
    models.Book.objects.filter(title__icontains='p') # 忽略大小写

    8.查询书籍是以“某某字”开头的
    models.Book.objects.filter(title__startswith='三')
    models.Book.objects.filter(title__endswith='p')
    9.查询日期是某某年的?(********)这个用的肯能多 <__year>
    models.Book.objects.filter(create_time__year="1994")

    &多表习题:
    1.注意:
      一对多:ForeignKey
      一对一:OnoToOneField 可以用ForeignKey代替ForeignKey(unique=True)
      上面两个关键字所创建出来的字段会自动加上_id后缀

      多对多:ManyToManyFiled
      该字段并不会真正的在表中展示出来 它仅仅是一个虚拟字段
      1.告诉orm自动创建第三种表
      2.帮助orm跨表查询
    首先我新创建出来的表是没有数据的,我需要先添加一些数据进行测试:




  • 相关阅读:
    【NLP-09】textCNN
    【NLP-08】textRNN
    【NLP-07】GloVe(Global Vectors for Word Representation)
    【NLP-06】fastText文本分类算法
    【NLP-05】Doc2vec
    mongo用户认证
    find直接copy大于某一个时间小于某一个时间的文件
    es的settings设置详解
    py笔记第一篇
    Linux inode节点使用率过大处理办法
  • 原文地址:https://www.cnblogs.com/ioipchina/p/11553426.html
Copyright © 2011-2022 走看看