Django --ORM
Posted staff
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django --ORM相关的知识,希望对你有一定的参考价值。
一、建表:
第一步、views.py里写表对应的类,例如:
from django.db import models
class Book(models.Model):
id=models.AutoField(primary_key=True)
title=models.CharField(max_length=32)
pub_date=models.DateField()
price=models.DecimalField(max_digits=8,decimal_places=2) #9999.99
publish=models.CharField(max_length=32)
第二步、settings.py里加两条
1,加项目名称app01,pycharm里面好像可以不加
2,
DATABASES = {
‘default‘: {
‘ENGINE‘: ‘django.db.backends.mysql‘,
‘NAME‘: ‘orm‘,
‘USER‘: ‘root‘,
‘PASSWORD‘: ‘mysql8‘,
‘HOST‘: ‘127.0.0.1‘,
‘PORT‘: 3306
}
}
第三步、项目文件夹下的__init__.py里加:
import pymysql
pymysql.install_as_MySQLdb()
第四步、如果Python解释器是3.4以上且Django是2.0以上还要注释掉:
..Python37Libsite-packagesdjangodbackendsmysqlase.py里的
if version < (1, 3, 13):
raise ImproperlyConfigured(‘mysqlclient 1.3.13 or newer is required; you have %s.‘ % Database.__version__)
第五步、如果想打印ORM转换过程中的sql语句,需要在settings里写:
LOGGING = {
‘version‘: 1,
‘disable_existing_loggers‘: False,
‘handlers‘: {
‘console‘:{
‘level‘:‘DEBUG‘,
‘class‘:‘logging.StreamHandler‘,
},
},
‘loggers‘: {
‘django.db.backends‘: {
‘handlers‘: [‘console‘],
‘propagate‘: True,
‘level‘:‘DEBUG‘,
},
}
}
第六步、在项目路径下顺序执行两条命令就把表生成好了
python manage.py makemigrations
python manage.py migrate
这时候除了类那张表Django还生成了其他表
二、单表增删改查
二、增加记录
有两种方式:
方式1:
from app01.models import Book
book1 = Book(title="python编程思想",price=100)
book1.save()
方式2:
# 执行后插入一条记录,返回这条记录的对象
book1 = Book.objects.create(title="python编程思想",price=100)
三、查询
‘‘‘
要知道方法的返回值和方法的调用者
‘‘‘
<1> Book.objects.all(): 查询所有结果,返回一个QuerySet对象,类似于list,可以遍历切片或索引访问
<2> Book.objects.filter(**kwargs): 例如filter(price=100,title=‘go‘),返回QuerySet对象
<3> Book.objects.get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个对象
如果符合筛选条件的对象超过一个或者没有都会抛出错误。
例如get(price=100,title=‘go‘)
<4> Book.objects.exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象,返回QuerySet对象
例如exclude(price=100)查出price<>100的
----------
(5) first()/last() 取第一个或最后一个,调用者是QuerySet,返回Book对象
(6) order_by(*field): 对查询结果排序,调用者是QuerySet,例如升序order_by("id") 降序order_by("-id")可以几个字段联合排序
(7) reverse(): 对查询结果反向排序,调用者是QuerySet
(8) count(): 返回QuerySet集合中的对象数
(9) exists(): 如果QuerySet包含数据,就返回True,否则返回False,由QuerySet调用
----------
<10> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列
model的实例化对象,而是一个可迭代的字典序列
例如:拿QuerySet集合中所有对象的某几个字段,返回字典组成的QuerySet,由QuerySet对象调用
Book.objects.all().values("title","price")
<11> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
(12) distinct(): 从返回结果中剔除重复纪录,配合values或values_list使用
.values(..).distinct()
单表查询之模糊查询
大于10且小于200
Book.objects.filter(price__gt=10, price__lt=200)
Book.objects.filter(price__range=[10,200])
以xx开头
Book.objects.filter(title__startwith="xx")
包含xx的
Book.objects.filter(title__contains="xx") 区分大小写
Book.objects.filter(title__icontains="xx") 不区分大小写
字段在集合内的
Book.objects.filter(price__in=[100,200,300])
年份等于xx的,date类型才有
Book.objects.filter(pub_date__year=2012)
删:对QuerySet进行操作,先查出来再删,返回删除的条数
QuerySet.delete()
改:对QuerySet进行操作
QuerySet.update(title="php")
以上是关于Django --ORM的主要内容,如果未能解决你的问题,请参考以下文章