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