目录
一、数据库操作
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 创建自己的数据库
- 启动MySQL服务(默认开机自启动)
命令行启动
net start mysql80
- 自带工具创建数据库(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的缩写,即大小写敏感。
- 数据库创建成功
3.2 Django连接数据库
- 在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 创建表
- 在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 ) """
- 在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),需要添加一个值,则原有数据对应新增列的所有记录都为添加的值(如新增size这个属性,添加值为1,则size这一列的值都为1)
- 若选择2)则会退出,可以在添加列时设置默认值,则原有数据对应新增的列都会填充默认值
age=models.IntegerField(default=2)
- 新增列允许为空:
data=models.IntegerField(null=True,blank=true)
- 以后在开发中如果想要对表结构进行调整:
- 在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渲染
- 【urls.py】文件
# 案例:用户管理(数据库利用)
path('user/manage/', views.user_manage),
- 【views.py】文件
# 案例:用户管理(数据库利用)
def user_manage(request):
# 1.获取数据库中所有用户信息
# [对象,对象,对象]
data_list = UserInfo.objects.all()
return render(request, 'user_manage.html', {"data_list": data_list})
- 在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提交,写入数据库
- 在【urls.py】文件中添加user/add路径及对应函数user_add
# 添加用户信息
path('user/add/', views.user_add),
- 在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("删除成功")
- 在【urls.py】文件中添加:
# 删除用户 path('user/delete/', views.user_delete),
- 在【views.py】文件中添加:
# 删除用户
def user_delete(request):
nid=request.GET.get("nid")
UserInfo.objects.filter(id=nid).delete()
# return HttpResponse("删除成功")
return redirect("/user/manage/")
- 在【user_manage.html】文件中增加:
结果:
删除成功