Django学习--基础篇(二)数据库操作

一、数据库操作

1.1 Mysql数据库+pymysql

import pymysql

# 1.连接MySQL
conn=pymysql.connect(host="127.0.0.1",port=3306,user='root',password="root123",charset='utf8',db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.发送指令
cursor.execute("insert into admin(username,password,mobile)value('zhangsan','qwe123','15166668888')")
conn.commit()

# 3.关闭
cursor.close()
conn.close()
  • Django开发操作数据库(使用pymysql比较麻烦),内部提供了ORM框架。

在这里插入图片描述

二、ORM框架

2.1 安装第三方模块

pip install mysqlclient
# 等价于pymysql

2.2 ORM可以帮助我们:

  • 创建、修改、删除数据库中的表(不使用SQL语句,但无法创建数据库)
  • 操作表中的数据(不使用SQL语句)

三、创建数据库

3.1 创建自己的数据库

  1. 启动MySQL服务(默认开机自启动)
    命令行启动
net start mysql80
  1. 自带工具创建数据库(MySQL数据库命令行)
create database gx_day15 default character set utf8 collate utf8_general_ci;

注意:
1)CREATE DATABASE gx_day15 :代表的是创建数据库gx_day15
2)DEFAULT CHARACTER SET utf8 :代表的是将该库的默认编码格式设置为utf8格式。
3)COLLATE utf8_general_ci :代表的是数据库校对规则,utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感。

  1. 数据库创建成功
    在这里插入图片描述

3.2 Django连接数据库

  1. 在settings.py文件中进行配置和修改,连接mysql数据库
    注意: django 自带的数据库时pymysql,使用比较麻烦,一般使用mysql

DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.sqlite3’,
‘NAME’: BASE_DIR / ‘db.sqlite3’,
}
}

django连接mysql数据库

# mysql数据库
DATABASES = {
    'default': {
        # django 连接mysql数据库
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'gx_day15', # 数据库名
        'USER': 'root',
        'PASSWORD': 'root123',
        'Host': '127.0.0.1', # 安装mysql的机器
        'Port': '3306',

    }
}

3.3 django 操作表

  • 创建表
  • 删除表
  • 修改表

3.3.1 创建表

  1. 在models.py文件中:
class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()

注意:""" ORM会根据这个类生成SQL语句: 表名:app01_userinfo 【app名称+类名】 create tables app01_userinfo( id int primary key auto_increment, name varchar(32), password varchar(64), age int ) """
在这里插入图片描述

  1. 在pyhcarm终端执行命令:

注意:
1)app已注册,
2)在项目的根目录下,保证有manage.py文件

python manage.py makemigrations
python manage.py migrate

在这里插入图片描述
在gx_day15数据库中查看ORM创建的表app01_userinfo
在这里插入图片描述
在这里插入图片描述

3.3.2 删除表

当要删除某张表时,可直接在manage.py文件中将改类直接注释或删除,再运行python manage.py makemigrations 和 python manage.py migrate命令

3.3.3 增加表中的属性(列)

在已经运行的表中增加属性,很可能表中已经有数据了
在这里插入图片描述
在表中新增列时,由于已存在列中可能已经有数据,所有新增列必须要指定新增列对应的数据:

  • 1)手动输入一个值
  • 2)设置默认值
  • 允许为空

注意:

  1. 若选择了1),需要添加一个值,则原有数据对应新增列的所有记录都为添加的值(如新增size这个属性,添加值为1,则size这一列的值都为1)
    在这里插入图片描述
  2. 若选择2)则会退出,可以在添加列时设置默认值,则原有数据对应新增的列都会填充默认值age=models.IntegerField(default=2)

在这里插入图片描述

  1. 新增列允许为空:data=models.IntegerField(null=True,blank=true)
    在这里插入图片描述
  2. 以后在开发中如果想要对表结构进行调整:
  • 在models.py文件中操作类即可
  • 输入命令即可使用ROM创建表
python manage.py makemigrations
python manage.py migrate

四、操作表中数据

在models.py文件中创建数据库类
在views.py文件中实现数据的增、删、查、改

【models.py】文件

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()
class Department(models.Model):
    title = models.CharField(max_length=16)

【views.py】文件

# 测试orm操作表中的数据
from app01.models import Department, UserInfo


def orm(request):
    # 1.新建数据
    # 在app01_department表中新建数据

    # Department.objects.create(title="销售部")
    # Department.objects.create(title="运营部")
    # Department.objects.create(title="IT部")

    # 在app01_userinfo表中新建数据

    # UserInfo.objects.create(name="张三", password="123", age=18)
    # UserInfo.objects.create(name="李四", password="666", age=19)
    # UserInfo.objects.create(name="王五", password="123", age=20)
    # UserInfo.objects.create(name="赵六", password="123", age=21)

    # ----------------------------------------------------------------

    # 2.删除数据
    # UserInfo.objects.filter(name="张三").delete()
    # UserInfo.objects.filter(id=4).delete()
    # UserInfo.objects.all().delete()
    # Department.objects.all().delete() #删除整张表中的数据

    # ----------------------------------------------------------------

    # 3.获取数据  .filter() .all()获取到的数据是列表中套的对象,可能取到多个数据

    # 3.1 获取符合条件的所有数据
    # data_list=[对象,行,行]  相当于QuerySet类型
    # data_list=UserInfo.objects.all()  # 获取表中的所有的数据
    # for obj in data_list:
    #     print(obj.id, obj.name, obj.age)

    # 3.2 获取表中一行数据
    # data_list=[对象] 依旧数QuerySet,列表中就只有一个对象
    # data_list= UserInfo.objects.filter(id=1)
    # print(data_list)

    # 获取表中第一条数据
    # row_obj=UserInfo.objects.filter(id=1).first()
    # print(row_obj.id,row_obj.name,row_obj.password,row_obj.age)

    # ----------------------------------------------------------------

    # 4.更新数据

    UserInfo.objects.all().update(password=999)
    UserInfo.objects.filter(name="赵六").update(id=4)

    return HttpResponse("成功")

五、案例:用户管理

5.1 展示用户列表

  • url
  • 函数
    1)获取所有用户信息(利用创建的app01_userinfo表)
    2)HTML渲染
  1. 【urls.py】文件
# 案例:用户管理(数据库利用)
    path('user/manage/', views.user_manage),
  1. 【views.py】文件
# 案例:用户管理(数据库利用)
def user_manage(request):
    # 1.获取数据库中所有用户信息
    # [对象,对象,对象]
    data_list = UserInfo.objects.all()
    return render(request, 'user_manage.html', {"data_list": data_list})
  1. 在templates目录创建user_manage.html文件
    【user_manage.html】文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户管理</title>
</head>

<body>
<h1>INFO列表</h1>
<table border="1">
    <thead>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>密码</th>
            <th>年龄</th>
        </tr>
    </thead>
    <tbody>
    {% for obj in data_list %}
        <tr>
            <td>{{obj.id}}</td>
            <td>{{obj.name}}</td>
            <td>{{obj.password}}</td>
            <td>{{obj.age}}</td>
        </tr>
    {% endfor %}
    </tbody>
</table>

</body>
</html>

结果:
在这里插入图片描述

5.2 添加用户

  • URL
  • 函数
    1)GET请求,看到页面,输入内容
    2)POST提交,写入数据库
  1. 在【urls.py】文件中添加user/add路径及对应函数user_add

 # 添加用户信息
    path('user/add/', views.user_add),

  1. 在templates目录下创建【user_add,html】文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加用户信息</title>
</head>
<body>
<h1>添加用户</h1>
<!--post 提交的地址和当前所访问的地址是一样的则可以省略 action="/user/add/"-->
<!--不写则表示向当前的页面发送post请求-->
<form method="post">
    {% csrf_token %}
    <input type="text" name="user" placeholder="用户名">
    <input type="text" name="password" placeholder="密码">
    <input type="text" name="age" placeholder="年龄">
    <input type="submit" value="添加">
</form>

</body>
</html>

3.在【views.py】文件中建立


from django.shortcuts import render, HttpResponse, redirect
from app01.models import UserInfo

# 案例:用户管理(数据库利用)
def user_manage(request):
    # 1.获取数据库中所有用户信息
    # [对象,对象,对象]
    data_list = UserInfo.objects.all()
    return render(request, 'user_manage.html', {"data_list": data_list})


# 添加用户信息
def user_add(request):
    if request.method == 'GET':
        return render(request, 'user_add.html')

    # 获取用户提交的数据
    user = request.POST.get("user")
    password = request.POST.get("password")
    age = request.POST.get("age")

    # 添加到数据库
    UserInfo.objects.create(name=user, password=password, age=age)

    # return HttpResponse("添加成功!")

    # 自动跳转 当跳转到非自己开发的页面时需要将域名写全
    # return redirect("http://127.0.0.1user/manage/")
    return redirect("/user/manage/")

结果:
1)添加用户
在这里插入图片描述
2)用户添加成功(直接添加到数据库)
在这里插入图片描述
在这里插入图片描述

5.3 删除用户

  • url
    函数
http://127.0.0.1:8000/user/delete/?nid=1
http://127.0.0.1:8000/user/delete/?nid=2
http://127.0.0.1:8000/user/delete/?nid=3

def 函数(request):
	nid=request.GET.get("nid")
	UserInfo.objects.filter(id=nid).delete()
	return HttpResponse("删除成功")
  1. 在【urls.py】文件中添加:# 删除用户 path('user/delete/', views.user_delete),
  2. 在【views.py】文件中添加:
# 删除用户
def user_delete(request):
    nid=request.GET.get("nid")
    UserInfo.objects.filter(id=nid).delete()
    # return HttpResponse("删除成功")
    return redirect("/user/manage/")
  1. 在【user_manage.html】文件中增加:
    在这里插入图片描述
    结果:
    在这里插入图片描述
    删除成功
    在这里插入图片描述
  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值