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跨表查询
首先我新创建出来的表是没有数据的,我需要先添加一些数据进行测试:




原文地址:https://www.cnblogs.com/ioipchina/p/11553426.html