191024DjangoORM之单表操作

一、ORM基础

  • ORM:object relation mapping 对象关系映射表

1、配置连接MySQL

  • settings.py:将默认配置删除,加入以下配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'Djangoorm',  #数据库名称
        'USER': 'dongfei',  #数据库用户名
        'PASSWORD': 'dongfei',  #数据库密码
        'HOST': '192.168.56.101',  #数据库主机,留空默认为localhost
        'PORT': '3306',  #数据库端口
    }
}

2、初始化数据库和创建表

  • app/models.py
class Book(models.Model):  #不写id字段Django会自动给加一个id字段,并且会将此字段设置为主键、自增长
    name = models.CharField(max_length=30)
    price = models.FloatField()
    pub_date = models.DateField()
    author = models.CharField(max_length=20,null=False)
  • 以下命令在cmd执行
>pip3 install mysqlclient
>python manage.py makemigrations
>python manage.py migrate

二、数据的增删改

1、插入数据

  • 方式一
from django.shortcuts import render,HttpResponse
from app.models import *
def addbook(request):
    b = Book(name="呐喊",price=38.8,author="鲁迅",pub_date="1923-08-01")
    b.save()
    return HttpResponse("添加成功")
  • 方式二(推荐)
from django.shortcuts import render,HttpResponse
from app.models import *
def addbook(request):
    Book.objects.create(name="彷徨",price=58.8,author="鲁迅",pub_date="1926-08-01")
    return HttpResponse("添加成功")

2、修改数据

  • 方式一(推荐)
def update(request):
    Book.objects.filter(name="呐喊").update(price=48.88)
    return HttpResponse("修改成功")
  • 方式二
def update(request):
    b = Book.objects.get(name="彷徨")
    b.price = 38.88
    b.save()
    return HttpResponse("修改成功")

补充:打印SQL语句日志,在settings.py中加入以下代码

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}

3、删除数据

def delbook(request):
    Book.objects.filter(name="呐喊").delete()
    return HttpResponse("删除成功")

三、单表记录的查询

  • 单表查询
def select(request):
    book_list = Book.objects.filter(id=1)  #拿到的是一个集合

    book_list = Book.objects.exclude(id=2)  #排除id=2的记录,和filter相反

    book_list = Book.objects.get(id=1)  #拿到的是一个对象

    book_list = Book.objects.all()[:3]  #取所有的记录,支持列表切片操作

    book_list = Book.objects.first()  #取第一条记录

    book_list = Book.objects.last()  #取最后一条记录

    book_list = Book.objects.filter(author="余华").values("name","price")  #具体取某个字段,返回字典

    book_list = Book.objects.filter(author="余华").values_list("name","price")  #具体取某个字段,返回元组

    book_list = Book.objects.all().values("name").distinct()  #去重

    book_list = Book.objects.all().order_by("price")  #排序

    book_list = Book.objects.all().order_by("price").reverse()  #反向排序

    book_list = Book.objects.all().order_by("price").count()  #统计

    book_list = Book.objects.filter(price__gt=30).values("name","price")  #查询价格大于30的

    book_list = Book.objects.filter(name__icontains="小")  #查询书名中包含”小“的书籍

    return render(request,'index.html',{"book_list": book_list})
  • 单表查询的模糊匹配
   Book.objects.filter(id__lt=10, id__gt=1)  # 获取id大于1 且 小于10的值

   Book.objects.filter(id__in=[11, 22, 33])  # 获取id等于11、22、33的数据

   Book.objects.filter(id__in=[11, 22, 33])  # not in

   Book.objects.filter(name__contains="小")  #包含

   Book.objects.filter(name__icontains="小")  # icontains大小写不敏感

   Book.objects.filter(id__range=[1, 2])  # 范围bettwen and

猜你喜欢

转载自www.cnblogs.com/L-dongf/p/11743920.html