Django 中orm的第一次举荐
Django
ORM :对象--关系--映射
创建Django准备工作:
1.在数据库创建你需要的数据库
2.在项目models里创建模型(就是python写的类,也可以说是python写的数据库)
class Book(models.Model):
id=models.AutoField(primary_key=True)
title=models.CharField(max_length=32)
state=models.BooleanField()
pub_date=models.DateField()
price=models.DecimalField(max_digits=8,decimal_places=2)
publish=models.CharField(max_length=32)
3.setting配置操作(以前的DATABASES注释掉,拷贝下面代码上去)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'bms', # 要连接的数据库,连接前需要创建好
'USER':'root', # 连接数据库的用户名
'PASSWORD':'', # 连接数据库的密码
'HOST':'127.0.0.1', # 连接主机,默认本级
'PORT':3306 # 端口 默认3306
}
}
4.在项目下__init__里添加下面这段代码:
import pymysql
pymysql.install_as_MySQLdb()
5.以上4步完成之后数据库并没有你的表,我们还得进行数据库的迁移操作,在pycharm终端里直接输入
1.python manage.py makemigrations #进行数据同步操作
2.python manage.py migrate #进行python写的数据库编译成sql语句
5.5 注意!为了确保INSTALLED_APPS中写入我们创建的app名称,我们的检查一下
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
"book" #这个就是我们的项目数据库中表的名称
]
6.这样,我们就可以创建成功了!前期的准备工作完成!
单表操作:
增
def addbook(request)
方式一:
Book.objects.create(title='python',price=100,publish="苹果出版社",pub_date="2012-12-12")
方式二:
book_obj = Book(title='python',price=100,publish="苹果出版社",pub_date="2012-12-12")
book_obj.save()
return HttpResponse('ok')
删
直接查到你要删除的数据后边直接+delete() 例如:删除掉python数据
ret = Book.objects.filter(title='python').delete() #没有返回值
print(ret)
改
查到你要修改的数据后边+update() 括号里写你要修改的数据,例如:把python价格修改成2000
bookinfo= Book.object.filter(title='python')update(price=2000)
print(bookinfo)
查
1.all() 查询所有
ret = Book.objects.all()
print(ret)
2.filter() 按照查询匹配的对象
ret = Book.objects.filter(title='python')
print(ret)
3.get() 只能查到只有一个对象的数据,多个对象或者没有则直接报错
ret = Book.objects.get(title='python')
print(ret)
4.exclude() 只要没有比配的都被查出来
ret = Book.objects.exclude(title='python')
print(ret)
5.order_by() 对查询结果进行排序
ret = Book.objects.filter(title='c#').order_by('-price') #c#这本书的排序就是price=200在前面
6.reverse() 对查询结果进行反向排序,ord_by 需要加参数 reverse 则不需要
ret=Book.objects.all().order_by('price').reverse()
print(ret)
7.first()
ret = Book.objects.filter(title='python').last()
print(ret)
8.last()
ret = Book.objects.filter(title='python').last()
print(ret)
9.count() 数数
ret = Book.objects.filter(title='python').count()
print(ret)
10.exists() 如果jueryset 里有值就返回 True
ret = Book.objects.exists()
print(ret)
11.values()返回的是一个queryset对象,里边是字典方式存储 [{'title': '四有青年'}, {'title': 'python'}...]
ret = Book.objects.all().values('title')
print(ret)
12.values_list 返回的是一个queryset对象,里边是元组形式存储 [('四有青年',), ('python',)...]
ret = Book.objects.all().values_list('title')
print(ret)
13.distinct 从返回的数据中除掉重复的数据<QuerySet [('中国青年报',), ('人民出版社',), ('人民日报',)]>
ret = Book.objects.all().values_list('publish').distinct()
print(ret)
模糊查询
1.price__in=[100,124,200,300] 在这里的都能被查到
ret = Book.objects.filter(price__in=[100,124,200,300])
print(ret)
2.price__gt=200 大于价格200的书籍
ret = Book.objects.filter(price__gt=200)
print(ret)
3.price__gt=200 小于价格200的书籍
ret = Book.objects.filter(price__lt=200)
print(ret)
4.price__range=[100,500] 价格在100--500之间的书籍
ret = Book.objects.filter(price__range=[100, 500])
print(ret)
5.title__contains='python' 查看python的书籍
ret = Book.objects.filter(title__contains='java')
print(ret)
6.
ret = Book.objects.filter(title__icontains='python')
print(ret)
7. 按照年查询 查询2018年10月份的书
ret = Book.objects.filter(pub_date__year=2018,pub_date__month=10)
print(ret)