目录
8连接MySQL数据库
8.1安装第三方模块
pip install mysqlclient
8.2ORM-创建数据库
ORM
能帮我们做两件事:
-
- 创建、修改、删除数据库中的表(不用sql语句)(!无法创建数据库)
- 操作表中的数据
(1)自行创建数据库:启动mysql服务
打开cmd,输入mysql -u root -p 输入密码查看是否可以运行成功
(2)创建一个数据库
create database 数据库名字 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
(3)查看你新建的数据库
show databases;
(4)django 连接数据库
在settings.py文件中进行配置和修改
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day3', # 数据库名字
'USER': 'root',#账户名
'PASSWORD': '123456',#账户密码
'HOST': '127.0.0.1', # 那台机器安装了MySQL
'PORT': 3306,
}
}
(5)django创建修改删除表
在models.py文件中
from django.db import models
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField(default=2)
class Department(models.Model):
title = models.CharField(max_length=16)
执行命令
python manage.py makemigrations
python manage.py migrate
如果要对表结构进行调整在models.py文件中直接修改即可
在表中新曾列的时,由于表中列可能已有数据,所以新增列必须要指定新增列对应的数据,
1.手动输入值
age = models.IntegerField(default=2)
2.设置可以为空
data = models.IntegerField(null=True, blank=True)
orm
def orm(request):
# 测试ORM操作表中的数据 2011-11-11 datetime.datetime.now()
# #### 1.新建 ####
# Department.objects.create(title="销售部")
# Department.objects.create(title="IT部")
# Department.objects.create(title="运营部")
# UserInfo.objects.create(name="小明", password="123", age=19)
# UserInfo.objects.create(name="小李", password="666", age=29)
# UserInfo.objects.create(name="小红", password="666")
# #### 2.删除 ####
# UserInfo.objects.filter(id=1).delete()
# UserInfo.objects.filter(id=2).delete()
# UserInfo.objects.filter(id=3).delete()
# Department.objects.all().delete()
# #### 3.获取数据 ####
# 3.1 获取符合条件的所有数据
# data_list = [对象,对象,对象] QuerySet类型
# data_list = UserInfo.objects.all()
# for obj in data_list:
# print(obj.id, obj.name, obj.password, obj.age)
# data_list = [对象,]
# data_list = UserInfo.objects.filter(id=1)
# print(data_list)
# 3.1 获取第一条数据【对象】
# 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(id=2).update(age=999)
# UserInfo.objects.filter(name="小李").update(age=999)
return HttpResponse("成功")
案例:用户管理
1.用户列表
1.url
path('info/list/', views.info_list),
2.viwes
def info_list(request):
# 1.获取数据库中所有的用户信息
# [对象,对象,对象]
data_list = UserInfo.objects.all()
# 2.渲染,返回给用户
return render(request, "info_list.html", {"data_list": data_list})
3.info_list.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>INFO列表</h1>
<a href="/info/add/">添加</a>
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>姓名</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>
<td>
<a href="/info/delete/?nid={{ obj.id }}">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
2.添加用户
1.url
path('info/add/', views.info_add),
2.viwes
def info_add(request):
if request.method == "GET":
return render(request, 'info_add.html')
# 获取用户提交的数据
user = request.POST.get("user")
pwd = request.POST.get("pwd")
age = request.POST.get("age")
# 添加到数据库
UserInfo.objects.create(name=user, password=pwd, age=age)
# 自动跳转
return redirect("/info/list/")
3.info_add.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>添加用户</h1>
<form method="post">
{% csrf_token %}
<input type="text" name="user" placeholder="用户名">
<input type="text" name="pwd" placeholder="密码">
<input type="text" name="age" placeholder="年龄">
<input type="submit" value="提交">
</form>
</body>
</html>
3.删除用户
1.url
path('info/delete/', views.info_delete),
2.viwes
def info_delete(request):
nid = request.GET.get('nid')
UserInfo.objects.filter(id=nid).delete()
return redirect("/info/list/")
1930

被折叠的 条评论
为什么被折叠?



