目录
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/")