标签:区分大小写 手机号码 名称 ast 文件中 创建时间 执行 upd orm
方法一:直接在某一个应用下的test文件中书写下面内容(先去manage.py拷贝前四行代码,然后写下面两行代码)
import os
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day53s.settings")
import django
django.setup()
#一定要等待测试脚本搭建完毕之后 才能导入django文件进行测试
方法二:直接新建一个任意名称的py文件 在里面也写上面的配置 也可以配置
#先创建数据
#1.create方法
book_obj=models.Books.objects.create(title='历代帝王',price=383.45,publish_date='2019-2-3')
print(book_obj)
from datetime import date
ctime=date.today()
book_obj=models.Books.objects.create(title='一生别离',price=463.55,publish_date=ctime)
print(book_obj)
#2.利用对象的绑定方法
book_obj=models.Books(title='厉害的人,从来不靠情绪表达自己',price=288.98,publish_date='2000-3-2')
book_obj.save()
#修改数据
res=models.Books.objects.filter(pk=1)
#修改数据
res=models.Books.objects.filter(pk=1)
print(res.query)
SELECT `app01_books`.`id`, `app01_books`.`title`, `app01_books`.`price`, `app01_books`.`publish_date` FROM `app01_books` WHERE `app01_books`.`id` = 1
#方式一 利用QuerySet方法
models.Books.objects.filter(pk=1).update(price=345.67)
#方式2 利用对象
book_obj=models.Books.objects.get(pk=1)
book_obj.price=456.78
book_obj.save() #该方法不推荐使用 推荐使用queryset方法
#利用对象的修改 内部其实是从头到尾将数据的所有字段重新写一遍
#删除数据
#1.利用queryset方法 delete()
models.Books.objects.filter(pk=3).delete()
#2.对象方法
book_obj=models.Books.objects.get(pk=2)
book_obj.delete()
查数据
all() 查询所有 返回的结果是QuerySet对象
res= models.Books.objects.all()
print(res)
orm语句的查询默认都是惰性查询,只有当你真正要使用数据的时候才会执行orm语句
filter() 筛选 相当于原生的SQL语句里面的where关键字 返回的结果是QuerySet对象
res=models.Books.objects.filter(pk=1,title='历代帝王') #支持多个参数 并且是and关系
print(res)
res=models.Books.objects.get(title='历代帝王')
res1=models.Books.objects.filter(title='历代帝王')
print(res,res1)
历代帝王 <QuerySet [<Books: 历代帝王>]>
res=models.Books.objects.filter(title='历代帝王').first()
print(res.price)
last() 取queryset中最后一个数据对象 数据对象
count() 统计数据的个数 数字
num=models.Books.objects.count()
print(num)
print(type(num))
res=models.Books.objects.values('title','price')
print(res)
<QuerySet [{'title': '历代帝王', 'price': Decimal('456.78')}]>
res = models.Books.objects.values_list('title', 'price')
print(res)
<QuerySet [('历代帝王', Decimal('456.78'))]>
res=models.Books.objects.order_by('price') #默认升序
res1=models.Books.objects.all().order_by('price') #默认升序 两者等价 下面的方式 语义更明确
#降序 字段前面加负号
res2 = models.Books.objects.all().order_by('-price')
print(res2)
res=models.Books.objects.all().reverse()
res1=models.Books.objects.all().order_by('price')
res2=models.Books.objects.all().order_by('price').reverse()
print(res,res1,res2)
res = models.Books.objects.all().exclude(title='风之影')
print(res)
res=models.Books.objects.filter(pk=1).exists()
print(res)
#该方法其实不需要使用 因为数据本身自带布尔值
res1 = models.Books.objects.values('title', 'price').distinct()
print(res1)
#查询价格大于500的书籍
res=models.Books.objects.filter(price__gt=500)
print(res)
# 查询价格小于400的书籍
res = models.Books.objects.filter(price__lt=400)
print(res)
# 查询价格大于等于500的书籍
res =models.Books.objects.filter(price__gte=500)
print(res)
# 查询价格小于等于500的书籍
res =models.Books.objects.filter(price__lte=500)
print(res)
# 查询价格是523.56或者456.78或者500的书籍
res = models.Books.objects.filter(price__in=[523.56,456.78,500])
print(res)
# 查询价格在200到600之间的书籍
res = models.Books.objects.filter(price__range=(200,600))
print(res)
# 查询出版日期在2018年的书籍
res = models.Books.objects.filter(publish_date__year='2018')
print(res)
# 查询出版日期在1月份的书籍
res = models.Books.objects.filter(publish_date__month='1')
print(res)
MySQL中的模糊查询:关键字 like
模糊匹配的符号 :%匹配任何个数的任意字符 _匹配一位任意的字符
# 查询名字以风开头的书籍
res = models.Books.objects.filter(title__startswith='风')
print(res)
# 查询名字以王结尾的书籍
res = models.Books.objects.filter(title__endswith='王')
print(res)
# 查询名字包含女人的书籍
res = models.Books.objects.filter(title__contains='女人')
print(res)
# 查询名字包含字母p的书籍
res = models.Books.objects.filter(title__contains='p')
#默认区分大小写
res1=models.Books.objects.filter(title__icontains='p') #想要忽略大小写 加i
print(res1)
#增
#第一种
models.Book.objects.create(title='年轮',price=333.45,publish_id=1)
#第二种
publish_obj=models.Publish.objects.filter(pk=2).first()
models.Book.objects.create(title='红楼梦',price=444.33,publish=publish_obj) #传虚拟字段 跟数据对象即可
#改
#第一种
models.Book.objects.filter(pk=1).update(publish_id=2)
#第二种
publish_obj = models.Publish.objects.filter(pk=1).first()
models.Book.objects.filter(pk=1).update(publish_id=publish_obj)
#删
models.Publish.objects.filter(pk=1).delete() #默认就是级联删除 级联更新
#增
book_obj=models.Book.objects.filter(pk=2).first()
print(book_obj.publish)
#点外键字段 可能会直接获取到外键关联的数据对象
#给当前的书绑定作者
方式一:
# print(book_obj.authors) #app01.Author.None
book_obj.authors.add(1) #在第三张表里面给书籍绑定一个主键为1的作者
book_obj.authors.add(1,2)
方式二:author_obj=models.Author.objects.filter(pk=1).first()
author_obj1=models.Author.objects.filter(pk=2).first()
book_obj.authors.add(author_obj)
book_obj.authors.add(author_obj,author_obj1)
#改
方法一:
book_obj=models.Book.objects.filter(pk=2).first()
book_obj.authors.set((1,3))
book_obj.authors.set([1,])
方法二:
author_obj=models.Author.objects.filter(pk=1).first()
author_obj1=models.Author.objects.filter(pk=2).first()
book_obj.authors.add(author_obj,author_obj1)
#删
方法一: book_obj=models.Book.objects.filter(pk=2).first()
book_obj.authors.remove(1,2)
方法二:
author_obj = models.Author.objects.filter(pk=1).first()
author_obj1 = models.Author.objects.filter(pk=2).first()
book_obj.authors.remove(author_obj)
book_obj.authors.remove(author_obj,author_obj1)
book_obj = models.Book.objects.filter(pk=2).first()
book_obj.authors.clear()
# 基于对象的跨表查询 子查询 分步操作
# 1.查询书籍主键为2的出版社名称 从书表到出版社 多对一是正向
book_obj = models.Book.objects.filter(pk=2).first()
print(book_obj.publish) # 出版社对象
print(book_obj.publish.name)
# 2.查询书籍主键为2的作者姓名
book_obj = models.Book.objects.filter(pk=2).first()
print(book_obj.authors) # app01.Author.None
print(book_obj.authors.all())
#<QuerySet [<Author: ldd>, <Author: zqf>]>
# 3.查询作者是ldd的手机号码
author_obj = models.Author.objects.filter(name='ldd').first()
print(author_obj.author_detail)
print(author_obj.author_detail.phone)
4.查询出版社是东方出版社出版过的书籍
publish_obj = models.Publish.objects.filter(name='东方出版社').first()
# print(publish_obj.book_set) # app01.Book.None
print(publish_obj.book_set.all())
5.查询作者是ldd写过的书籍
author_obj = models.Author.objects.filter(name='ldd').first()
# print(author_obj.book_set) # app01.Book.None
print(author_obj.book_set.all()) # app01.Book.None
6.查询手机号是120的作者姓名
author_detail_obj = models.AuthorDetail.objects.filter(phone=120).first()
print(author_detail_obj.author)
print(author_detail_obj.author.email)
# 1.查询书籍pk为2的出版社名称
# 正向
res = models.Book.objects.filter(pk=2).values('publish__name') # 写外键字段就相当于已经跨到外键字段所关联的表
# 你想要改表的哪个字段信息 你只需要加__获取即可
print(res)
# 反向
res = models.Publish.objects.filter(book__pk=2).values('name')
print(res)
# 2.查询书籍pk为2的作者姓名和邮箱
res = models.Book.objects.filter(pk=2).values('authors__name','authors__email')
print(res)
res = models.Author.objects.filter(book__pk=2).values('name','email')
print(res)
"""
models后面点的谁 就以谁为基表
"""
# 3.查询作者是xdd的家庭地址
res = models.Author.objects.filter(name='xdd').values('author_detail__addr')
print(res)
res = models.AuthorDetail.objects.filter(author__name='egon').values('addr')
print(res)
# 4.查询出版社是东方出版社出版过的书的名字
res = models.Publish.objects.filter(name='东方出版社').values('book__title')
print(res)
res = models.Book.objects.filter(publish__name='东方出版社').values('title')
print(res)
# 5.查询书籍pk是2的作者的手机号
res = models.Book.objects.filter(pk=2).values('authors__author_detail__phone')
print(res)
res = models.Author.objects.filter(book__pk=2).values('author_detail__phone')
print(res)
标签:区分大小写 手机号码 名称 ast 文件中 创建时间 执行 upd orm
原文地址:https://www.cnblogs.com/lidandanaa/p/11946214.html