Django连接mysql库 最基本的连接数据库增删改查:
1.首先安装mysqlclient库:
pip install mysqlclient -i https://pypi.tuna.tsinghua.edu.cn/simple
2.settings.py 修改databases
DATABASES = {
'default':{
'ENGINE' : 'django.db.backends.mysql',
'NAME' : 'study01',
'USER' : 'root',
'PASSWORD' : 'Bysn123456*',
'HOST' : '127.0.0.1',
'PORT' : '3306',
}
}
2.1 Django 远程连接数据库,django.db.utils.OperationalE(1130, "Host ' ...' is not allowed to connect to this MySQL server")。
发现 root 用户只能本地使用。具体解决流程如下:
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select host,user from user;
+-----------+---------------+
| host | user |
+-----------+---------------+
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+---------------+
3 rows in set (0.00 sec)
mysql> update user set host='%' where user='root'
-> ;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select host,user from user;
+-----------+---------------+
| host | user |
+-----------+---------------+
| % | root |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+---------------+
3 rows in set (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
3、orm类创建数据表 models.py中
name = models.CharField(verbose_name="用户名", max_length=32)
password = models.CharField(verbose_name='密码',max_length=64)
email=models.CharField(max_length=64,verbose_name='邮箱')
相当于mysql创建表
create table djproject01_userinfo(
id bigint auto_increment primary key,
name varchar(32),
password varchar(64),
email varchar(64)
)
4、执行
python manage.py makemigrations
python manage.py migrate
5、orm 增删改查
urls..py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('user/list/', views.user_list),
path('user/add/', views.user_add),
path('user/delete/', views.user_delete),
path('user/<int:nid>/edit/',views.user_edit),
]
views.py
from study01.models import UserInfo
#查询所有的用户信息
def user_list(request):
# 获取数据库中所有的用户信息
data_list = UserInfo.objects.all()
print(data_list)
return render(request, "user/user_info.html", {"data_list": data_list})
#增加用户信息
def user_add(request):
if request.method == "GET":
return render(request, "user/user_add.html")
# 获取用户提交的数据
user = request.POST.get("user")
pwd = request.POST.get("pwd")
email = request.POST.get("email")
# 添加到数据库
UserInfo.objects.create(name=user, password=pwd, email=email)
return redirect("/user/list/")
#删除用户信息
def user_delete(request):
nid = request.GET.get('nid')
UserInfo.objects.filter(id=nid).delete()
return redirect("/user/list/")
#修改用户信息
def user_edit(request, nid):
obj1 = UserInfo.objects.get(id=nid)
if request.method == 'GET':
return render(request, 'user/user_edit.html', {'userList': obj1})
user = request.POST.get("user")
pwd = request.POST.get("pwd")
email = request.POST.get("email")
UserInfo.objects.filter(id=nid).update(name=user, password=pwd, email=email)
return redirect("/user/list")
user_info.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户列表</title>
</head>
<body>
<h1>用户列表信息</h1>
<a href="/user/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.email}}</td>
<td>
<a href="/user/delete/?nid={{ obj.id }}">删除</a>
<a href="/user/{{ obj.id }}/edit/">修改</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html
user_add.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<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="email" placeholder="邮箱">
<input type="submit" value="提交" >
</form>
</body>
</html>
user_edit.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>修改用户信息</title>
</head>
<body>
<h1>修改用户信息</h1>
<form method="post" >
{% csrf_token %}
<input type="text" name="user" placeholder="用户名" value="{{ userList.name }}">
<input type="text" name="pwd" placeholder="密码" value="{{ userList.password }}">
<input type="text" name="email" placeholder="邮箱" value="{{ userList.email }}">
<input type="submit" value="提交" >
</form>
</body>
</html>