1.setting配置和打印原生sql日志
setting配置连接mysql
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_orm', #你的数据库名称
'USER': 'root', #你的数据库用户名
'PASSWORD': '123456', #你的数据库密码
'HOST': '', #你的数据库主机,留空默认为localhost
'PORT': '3306', #你的数据库端口
}
}
配置打印原生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',
},
}
}
2.配置使用pymysql,放到项目的init.py里
import pymysql
pymysql.install_as_MySQLdb()
3.增删改查
# Create your views here.
def index(request):
return render(request, 'index.html')
def addbook(request):
# 第一种方式
# b=Book(name='python',price=99,author='guo',pub_date='2019-09-17')
# b.save()
# 第二种方式
Book.objects.create(name='老男孩linux', price=78, author='oldboy', pub_date='2019-09-17')
return HttpResponse('添加成功')
def update(request):
#第一种 单对单
# Book.objects.filter(author='oldboy').update(price=999)
#第二种方法 所有都重新赋值效率低
b = Book.objects.get(author='guo')
b.price=120
b.save()
return HttpResponse('修改成功')
def delete(request):
Book.objects.filter(author='oldboy').delete()
return HttpResponse('删除成功')
def select(request):
book_list=Book.objects.all()
return render(request,'index.html',locals())
4.Book.objects.get(id=5)获取一天数据,filter数据组--元素放对象
# book_list=Book.objects.all() 获取所有对象,放入一个列表里
# print(book_list)
# print(book_list[0])#Book object
# book_list = Book.objects.filter(id=2)
链表支持切片
# book_list = Book.objects.all()[::2]
# book_list = Book.objects.all()[::-1]
获取第一个对象
# book_list = Book.objects.first()
获取最后一个对象
# book_list = Book.objects.last()
# book_list = Book.objects.get(id=2)#只能取出一条记录时才不报错
获取某一列的值
# ret1=Book.objects.filter(author="oldboy").values("name")
# ret2=Book.objects.filter(author="yuan").values_list("namfe","price")
# book_list=Book.objects.exclude(author="yuan").values("name","price")
# print(ret1)
# print(ret2)
# book_list= Book.objects.all().values("name").distinct()
# book_count= Book.objects.all().values("name").distinct().count()
# print(book_count)
5.万能的双下划线
__exact 精确等于 like 'aaa'
__iexact 精确等于 忽略大小写 ilike 'aaa'
__contains 包含 like '%aaa%'
__icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一个list范围内
__startswith 以...开头
__istartswith 以...开头 忽略大小写
__endswith 以...结尾
__iendswith 以...结尾,忽略大小写
__range 在...范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False
__isnull=True 与 __exact=None的区别
book_list=Book.objects.filter(price__gt=50).values("name","price")
book_list=Book.objects.filter(name__contains="P").values_list("name","price")