(七)Django模型基础一(连接数据库,数据的增删查改)

1.Django的ORM简介

Django的ORM系统的分析:
orm系统的方法--------封装-------->python代码--------执行------>sql语句-------操作------->数据库
1.ORM概念:对象关系映射(Object Relation Mapping,简称ORM)
2.ORM的优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。

2.django模型映射的关系

模型类------------->数据表
类属性------------->表字段名
1.模型类必须写在app下的models.py文件中。
2.模型如果需要映射到数据库,所在的app必须被安装。
3.一个数据表对应一个模型类,表中的字段,对应模型中的类属性。

3.数据库的配置

在根目录下的settings.py下更改代码

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE':'django.db.backends.mysql',#数据库引擎
        'NAME':'mydb',  #数据库名称
        'USER':'root',  #链接数据库的用户
        'PASSWORD':'qwe123',  #用户密码
        'HOST':'127.0.0.1'  #mysql服务器IP
        'PORT':'3306'     #数据库默认的是3306
    }
}

如果root密码忘记,可以创建一个管理员用户。
创建一个管理员用户boshan账号,密码为boshan:
CREATE USER ‘boshan’ @’%‘IDENTIFIED BY ‘boshan’;
给这个用户授权所有远程访问,这个用户主要用于管理整个数据库,备份,还原等操作。
GRANT ALL ON . TO ‘boshan’@’%’;
使授权立即生效:
FLUSH PRIVILEGES;

4.pymysql数据库连接器的配置

在虚拟环境中安装pymysql:
pip install pymysql

设置连接器为pymysql:
在主目录下的_init_.py文件添加下面两句
import pymysql
pymysql.install_as_MySQLdb()

init.py

import pymysql
pymysql.install_as_MySQLdb()

5.将模型类映射到数据库

1.首先执行以下命令,要创建映射文件
python manage.py makemigrations appname

2.执行以下命令,将映射文件中的映射数据提交到数据库中
python manage.py migrate appname

命令后面可以跟app名称,表示指定对某个app的模型进行映射,没写所有的app都执行。
在执行命令前,保证创建模型的app是已经注册过的。

from django.db import models

#Create your models here.

#1.创建模型类
class User(models.Model):
    id = models.AutoField(primary_key=True)   #主键约束,可以省略
    name = models.CharField(max_length=30,default='boshan')   #控制字符串长度
    age = models.IntegerField(default=18)
    sex = models.CharField(max_length=30,default='male')
    address = models.CharField(max_length=30,default='suzhou')


#2.将模型映射到数据库中
#python manage.py makemigrations appname

#3.将映射文件中的数据真正提交到数据库
#python manage.py migrate appname

小提示:如果字段没加默认值的话,可能会和数据库同步不成功。

6.数据的增删改查

models_test/urls.py

from django.contrib import admin
from django.urls import path,re_path
from . import views
urlpatterns = [
                path('add_user/',views.add_user),
                path('delete_user/',views.delete_user),
                path('update_user/',views.update_user),
                path('select_user/',views.select_user)
]

(1)增
models_test/views.py

def add_user(request):
    # #方法一
    # boshan = User(name='boshan',age=18,sex='male',address='苏州')
    # boshan.save()

    #方法二
    # xiaoming = User()
    # xiaoming.name = 'xiaoming'
    # xiaoming.age = 19
    # xiaoming.sex = 'famale'
    # xiaoming.address = '吴中区越溪'
    # xiaoming.save()

    #方法三
    # User.objects.create(name='zhangsan',age=28,sex='male',address='苏州姑苏区')
    #方法四--不重复添加
    User.objects.get_or_create(name='lisi',age=22,sex='male',address='苏州同里')

    return HttpResponse('添加成功!!')

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191115160803973.png在这里插入图片描述
(2)查
通过print可以在后台看到我们访问到的数据,并且输出方式就是模型中的_str_方式
all()和filter()方法返回的是QuerySet对象
get()方法返回的单个对象,如果符合条件的对象有多个,则get报错。

QuerySet API
1.从数据库中查询出来的结果一般是一个集合,这个集合叫做QuerySet。
2.QuerySet是可迭代对象。
3.QuerySet支持切片,不支持负索引。
4.可以用list强行将QuerySet转成列表。

第一种方法:

def select_user(request):
    #查询所有的数据
    result = User.objects.all()
    print(result)
    return HttpResponse('查询成功!!')

在控制台打印的结果

<QuerySet [<User: User object (1)>, <User: User object (2)>, <User: User object (3)>, <User: User object (4)>, <User: User object (5)>, <User: User object (6)>, <User: User object (7)>]>

可以在models.py中创建魔法方法,转换格式
创建__str__魔法方法
#1.创建模型类

class User(models.Model):
    id = models.AutoField(primary_key=True)   #主键约束,可以省略
    name = models.CharField(max_length=30,default='boshan')   #控制字符串长度
    age = models.IntegerField(default=18)
    sex = models.CharField(max_length=30,default='male')
    address = models.CharField(max_length=30,default='suzhou')

    def __str__(self):
        return 'User<id=%s,name=%s,age=%s,sex=%s,address=%s>'  % (self.id,self.name,self.age,self.sex,self.address)

在这里插入图片描述

第二种方法:
通过迭代

def select_user(request):
    #查询所有的数据
    result = User.objects.all()
    for foo in result:
        print(foo)

    return HttpResponse('查询成功!!')

查询单条数据

def select_user(request):
    #查询所有的数据
    #result = User.objects.get(name='boshan')
    #查询年龄大于18的
    result = User.objects.filter(age__gt=18)
    print(result)
    return HttpResponse('查询成功!!')

查询满足条件的数据

可以输入多个条件

def select_user(request):
    #查询满足条件的数据
    result = User.objects.filter(name='zhangsan')
    print(result)
    return HttpResponse('查询成功!!')

(3)改

def update_user(request):
    reslut = User.objects.get(id=3)
    reslut.name = '嘻嘻嘻'
    reslut.save()

(4)删

def delete_user(request):
    User.objects.get(id=4).delete()
    return HttpResponse('删除成功!!')

总结:
Django模型的基本的流程
1.数据库的配置
2.连接器的配置
3.django模型的编写
4.模型映射
5.简单的增删查改

猜你喜欢

转载自blog.csdn.net/weixin_44204361/article/details/103083201