Django单表查询

1 模版导入-->写了一个好看的组件,可以复用,
		1 写一个模板
		2 在模板中:{% include '模板的名字'%}
	2 模板的继承
		1 写一个母版,留一个可扩展的区域(盒子),可以留多个盒子(留的越多,可扩展性越高)
			{%block 名字%}
				可以写内容
			{%endblock%}
		2 在子模板中使用:
			{%block 名字%}
				子模板的内容
			{%endblock 名字%}
		
	3 静态文件相关
		1 写死静态文件:<link rel="stylesheet" href="/static/css/mycss.css">
		2 使用 static标签函数:
			-{%load static%}
			#static返回值,会拼上传参的路径
			-{% static "传参"%}
		3 使用get_static_prefix 标签
			-{%load static%}
			#get_static_prefix返回值是:静态文件的地址,相当于/static/
			-{% get_static_prefix %}css/mycss.css
	4 单表操作;
		-数据迁移命令:
			-python3 manage.py makemigrations   --->只是对变化做一个记录,记录文件在app的migrations
			-python3 manage.py migrate   ---->把更改提交到数据库
			-python3 manage.py showmigrations  ---->查看那个没有提交到数据库
			
		-查询api
			<1> all():                  查询所有结果			  			  
			<2> filter(**kwargs):       它包含了与所给筛选条件相匹配的对象		  
			<3> get(**kwargs):          返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。 
			<4> exclude(**kwargs):      它包含了与所给筛选条件不匹配的对象	 
			<5> order_by(*field):       对查询结果排序('-id')	  
			<6> reverse():              对查询结果反向排序			  
			<8> count():                返回数据库中匹配查询(QuerySet)的对象数量。	  
			<9> first():                返回第一条记录	  
			<10> last():                返回最后一条记录		  
			<11> exists():              如果QuerySet包含数据,就返回True,否则返回False	 
			<12> values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列
										model的实例化对象,而是一个可迭代的字典序列
			<13> values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列			 
			<14> distinct():            从返回结果中剔除重复纪录
			
		-基于双下划线的模糊查询
			Book.objects.filter(price__in=[100,200,300])
			Book.objects.filter(price__gt=100)
			Book.objects.filter(price__lt=100)
			Book.objects.filter(price__gte=100)
			Book.objects.filter(price__lte=100)
			Book.objects.filter(price__range=[100,200])
			Book.objects.filter(title__contains="python")
			Book.objects.filter(title__icontains="python")
			Book.objects.filter(title__startswith="py")
			Book.objects.filter(pub_date__year=2012)
二 补充
import os

if __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day76orm.settings")
import django

django.setup()

from app01 import models
# ****************新增*********插入数据的两种方式
# 方式一 :返回结果是一个对象
# book=models.Book.objects.create(name='红楼梦',price=23.8,publish='人民出版社',author='曹雪芹',create_data='2018-09-17')
# print(book.name)
# 方式二:先实例化产生对象,然后调用save方法,保存
# book=models.Book(name='水浒传',price=99.8,publish='老男孩出版社',author='施耐庵',create_data='2018-08-08')
# book.save()
# print(book.name)
# 时间格式,可以传字符串,可以传日期格式
# import datetime
#
# ctime = datetime.datetime.now()
# book = models.Book.objects.create(name='西游记', price=73.8, publish='北京出版社', author='吴承恩', create_data=ctime)
# print(book.name)
# #删除******************
# 删除名字叫西游记的这本书
# ret=models.Book.objects.filter(name='西游记').delete()
# print(ret)
# 删除的第二种方式:
# ret = models.Book.objects.filter(name='西游记').first()
# ret.delete()
# **************修改
# ret=models.Book.objects.filter(name='西游记').update(price=20.9)
# 对象修改(没有update方法,但是可以用save来修改)
# book = models.Book.objects.filter(name='西游记').first()
# book.price=89
# book.save()
# 查询************************重点************************
# (1)all()
# ret=models.Book.objects.all()
# print(ret)
# filter()
# 查询名字叫西游记的这本书
# ret=models.Book.objects.filter(name='西游记').first()
# 不支持负数,只支持正数
# ret=models.Book.objects.filter(name='西游记')[-1]
# print(ret)
# filter内可以传多个参数,用逗号分隔,他们之间是and的关系
# ret=models.Book.objects.filter(name='西游记',price='73.8')
# # ret.query -->queryset对象打印sql
# print(ret.query)
#get() 有且只有一个结果,才能用,如果有一个,返回的是对象,不是queryset对象,通常用在,用id查询的情况
# ret=models.Book.objects.get(name='红楼梦')
# ret=models.Book.objects.get(id=1)
# print(type(ret))
# exclude()查询名字不叫西游记的书,结果也是queryset对象
'''
SELECT
`app01_book`.`id`,
`app01_book`.`name`,
`app01_book`.`price`,
`app01_book`.`publish`,
`app01_book`.`author`,
`app01_book`.`create_data`
FROM
`app01_book`
WHERE
NOT (
`app01_book`.`name` = 西游记
AND `app01_book`.`price` = 23.8
)
'''
# ret=models.Book.objects.exclude(name='西游记',price='23.8')
# print(ret)
# print(ret.query)
# order_by 按价格升序排
# ret=models.Book.objects.all().order_by('price')
# print(ret)
# queryset对象可以继续 点 方法
# ret=models.Book.objects.all().order_by('price').filter(name='西游记')
# print(ret)
# 按价格倒序排
# ret=models.Book.objects.all().order_by('-price')
# print(ret)
# 可以传多个
# ret=models.Book.objects.all().order_by('-price','create_data')
# print(ret)
# print(ret.query)
# reverse 对结果进行反向排序
# ret=models.Book.objects.all().order_by('-price').reverse()
# print(ret)
# print(ret.query)
# count 查询结果个数
# ret=models.Book.objects.all().count()
# ret=models.Book.objects.all().filter(name='西游记').count()
# print(ret)
# last 返回book对象
# ret=models.Book.objects.all().last()
# print(ret)
# exists 返回结果是布尔类型
# ret=models.Book.objects.filter(name='三国演义').exists()
# print(ret)

# values(*field): queryset对象里套字典
# ret=models.Book.objects.all().values('name','price')
# ret=models.Book.objects.all().values('name')
# print(ret)
# value_list queryset对象里套元组
# ret=models.Book.objects.all().values_list('name','price')
# print(ret)
# distinct() 必须完全一样,才能去重 只要带了id,去重就没有意义了
# ret=models.Book.objects.all().values('name').distinct()
# print(ret)

# **************基于双下划线的模糊查询
# 查询价格大于89 的书
# ret=models.Book.objects.filter(price__gt='89')
# print(ret)
# 查询价格小于89 的书
# ret=models.Book.objects.filter(price__lt='89')
# print(ret)

# ret=models.Book.objects.filter(price__lt='89',price='89')
# 小于等于
# ret=models.Book.objects.filter(price__lte='89')
# 大于等于,
# ret = models.Book.objects.filter(price__gte='89')
# print(ret)
# in 在XX中
# ret=models.Book.objects.filter(price__in=['23.8','89','100'])
# print(ret)
# print(ret.query)
# range 在XX范围内 between and
# ret=models.Book.objects.filter(price__range=[50,100])
# print(ret.query)
# contains 查询名字有'%红%'的书
# ret=models.Book.objects.filter(name__contains='红')
# print(ret)
# print(ret.query)
# icontains 查询名字带p的书,忽略大小写
# ret=models.Book.objects.filter(name__icontains='P')
# print(ret)
# print(ret.query)
# startswith 以XX开头
# ret=models.Book.objects.filter(name__startswith='红')
# print(ret)
# print(ret.query)
# endswith
# ret=models.Book.objects.filter(name__endswith='梦')
# print(ret)

# pub_date__year 按年查询
# ret=models.Book.objects.filter(create_data__year='2017')
# print(ret)


Mysql数据库的配置
DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
'default': {
# key值必须都是大写
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day77',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': 'admin',
}

STATIC_URL = '/static/'

STATICFILES_DIRS =[
os.path.join(BASE_DIR, "static"),
]


在Django __init__这个文件里继续写下以下数据
import pymysql
pymysql.install_as_MySQLdb()










 
posted @ 2018-11-12 15:30  不沉之月  阅读(117)  评论(0编辑  收藏  举报