Django之数据库操作入门
pycharm连接mysql数据库
pycharm与数据库图形化交互方式
- pycharm连接数据库,打开配置页面

2. 在配置页面配置数据库连接信息,注意第一次连接需要下载驱动,最后点test connection测试连接通过即可

pycharm后台连接数据库
# 在settings.py中,添加数据库的连接配置(可以配置多个数据库)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# 修改为(最简单的配置)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 将最后一位改为要连接的数据库类型
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'NAME': 'db1', # 数据库名称
'HOST': '192.168.0.2', # 数据库地址
'PORT': 3306, # 数据库连接端口
'USER': 'root', # 连接数据库用户名
'PASSWORD': '123', # 连接数据库密码
'CHARSET': 'utf8', # 使用的字符集
}
}
django连接数据库报错
# django 1.x版本处理:
# 需要在项目或app的__init__.py文件中添加如下配置
import pymysql
pymysql.install_as_MySQLdb()
# django 2.x及以下,可以通过下载mysqlclient模块解决
pip3.8 install mysqlclient
ORM简介
ORM高度封装了SQL语句,在django中使用ORM操作数据库,但有时候会效率较低,需要自己写SQL。
ORM建表
- 在models.py模型层创建模型
class user(models.Model):
# 创建一个表的主键字段,注意,如果不指定主键字段,ORM会自动帮你创建一个主键字段
id = models.AutoField(primary_key=True)
# 创建一个字符字段,最大大小指定为32长度,verbose_name可以增加字段注释
name = models.CharField(max_length=32, verbose_name='姓名')
age = models.IntegerField(verbose_name='年龄')
- 执行数据库迁移命令
- 只有执行了数据库迁移命令,django才会在数据库中创建表,并且可以使用ORM操作。
python manage.py makemigrations # 将操作记录到系统中
python manage.py migrate # 将操作同步到数据库中
- 注:在执行完数据库迁移命令后,django也会在数据库中自动创建一些系统表。
我们继续使用昨天用户注册页面,代码如下:
<div class="container">
<div class="row">
<h1 class="text-center">用户登录</h1>
<div class="col-md-6 col-md-offset-3">
<form action="" method="post">
{% csrf_token %}
<p>username:
<input type="text" class="form-control" name="name">
</p>
<p>password:
<input type="text" class="form-control" name="age">
</p>
<input type="submit" class="btn btn-block btn-success">
</form>
</div>
</div>
</div>
下面我们使用这个页面进行数据库相关操作
ORM入门之增删改查
- from app import models
- models.类名(也就是表名).objects.create(插入数据)
- models.类名(也就是表名).objects.filter(查询条件).delete()
- models.类名(也就是表名).objects.filter(查询条件).update(修改内容)
- models.类名(也就是表名).objects.filter(查询条件)
ORM写数据
models.user.objects.create(name=name, age=age)
ORM之删数据
# 先将需要删除的数据进行筛选出来后,再删除
res = models.user.objects.filter(id=1).delete()
# 返回值为:(1, {'app01.user': 1})
print(res)
ORM之改数据
# 修改数据需要先将要修改的数据查询出来后,再进行修改.
# 类似于SQL:update user set name = 'Rose' where name='xxx';
res = models.user.objects.filter(name=name).update(name='Rose')
# update的返回值为修改的最后一个值的主键
print(res)
ORM之查数据
# 使用一个变量接收返回值,返回的结果为一个QuerySet,数据套字典的格式。
res = models.user.objects.filter(name=name) # <QuerySet [<user: user object (1)>, <user: user object (2)>]>
# 如果想要查看QuerySet中的值时,可以使用以下方式操作
print(res[0].name)
print(res[0].age)
练习:简单实现注册登录功能
模型层models
class register(models.Model):
username = models.CharField(max_length=32, verbose_name='用户名')
password = models.CharField(max_length=800, verbose_name='用户密码')
路由层urls
path('register/', views.register_func),
# 登录页面
path('login/', views.login_func),
视图层
def register_func(request):
if request.method == 'POST':
# 接收前台传入的数据
name = request.POST.get('name')
pwd = request.POST.get('pwd')
confirm_pwd = request.POST.get('confirm_pwd')
if name and pwd and confirm_pwd:
db_username = models.register.objects.filter(username=name)
if db_username:
return HttpResponse('用户名已存在')
elif pwd == confirm_pwd and name:
md5 = hashlib.md5()
md5.update('ChinaPost'.encode('utf8'))
md5.update(pwd.encode('utf8'))
md5_pwd = md5.hexdigest()
models.register.objects.create(username=name, password=md5_pwd)
return HttpResponse('注册成功')
else:
return HttpResponse('两次密码不一致')
else:
return HttpResponse('用户名或密码不能为空')
return render(request, 'login.html')
# 简单的登录功能
def login_func(request):
# 验证是否是post请求
if request.method == 'POST':
# 接收前端用户名密码
name = request.POST.get('name')
pwd = request.POST.get('pwd')
# 判断用户名或密码是否为空
if name and pwd:
# 从数据库中取数进行比对
db_name = models.register.objects.filter(username = name)
# 对密码进行加密
md5 = hashlib.md5()
md5.update('ChinaPost'.encode('utf8'))
md5.update(pwd.encode('utf8'))
md5_pwd = md5.hexdigest()
# 判断用户名与密码是否一致
if db_name:
if db_name[0].password == md5_pwd:
return HttpResponse('登录成功')
else:
return HttpResponse('用户名或密码错误')
else:
return HttpResponse('用户名或密码错误')
else:
# 如果用户名或密码为空,则返回错误
return HttpResponse('错误!用户名或密码不可以为空')
return render(request, 'login.html')
前端-注册页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.css' %}">
<script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.js' %}"></script>
<script src="{% static 'jQuery.js' %}"></script>
</head>
<body>
<div class="container">
<div class="row">
<h1 class="text-center">用户登录</h1>
<div class="col-md-6 col-md-offset-3">
<form action="" method="post">
{% csrf_token %}
<p>username:
<input type="text" class="form-control" name="name">
</p>
<p>password:
<input type="password" class="form-control" name="pwd">
</p>
<p>confirm_password
<input type="password" class="form-control" name="confirm_pwd">
</p>
<input type="submit" class="btn btn-block btn-success">
</form>
</div>
</div>
</div>
</body>>
</html>
前端登录页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.css' %}">
<script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.js' %}"></script>
<script src="{% static 'font-awesome-4.7.0/css/font-awesome.css' %}"></script>
<script src="{% static 'jQuery.js' %}"></script>
</head>
<body>
<div class="container">
<h1 class="text-center">用户登录</h1>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<form action="" method="post">
{% csrf_token %}
<p>用户名
<input type="text" class="form-control" name="name">
</p>
<p>密码
<input type="password" class="form-control" name="pwd">
</p>
<input type="submit" class="btn btn-success btn-block">
</form>
</div>
</div>
</div>
</body>
</html>
Django之数据库操作入门的更多相关文章
- C语言与数据库操作入门
https://blog.csdn.net/flyingqd/article/details/78763652 C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1 ...
- C语言与数据库操作入门(Win版)
C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1387 数据库,DataBase,学C语言的是不是想说,很想爱她却并不容易呢?不用着急,C语言也可以操作数据库的 ...
- Django 2.0 学习(16):Django ORM 数据库操作(下)
Django ORM数据库操作(下) 一.增加表记录 对于表单有两种方式: # 方式一:实例化对象就是一条表记录france_obj = models.Student(name="海地&qu ...
- Django 2.0 学习(14):Django ORM 数据库操作(上)
Django ORM 数据库操作(上) ORM介绍 映射关系: 数据库表名 ---------->类名:数据库字段 ---------->类属性:数据库表一行数据 ----------&g ...
- Django与数据库操作
Django与数据库操作 数据库连接的方法 web 框架 django --- 自己内部实现 (ORM) + pymysql(连接) Flask,tornado --- pymysql SQLArch ...
- django models 数据库操作
django models 数据库操作 创建模型 实例代码如下 from django.db import models class School(models.Model): pass class ...
- Django模型-数据库操作
前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...
- django中数据库操作——in操作符
django一对多关系中,为了实现按照一端查询多端,之前都是用extra操作符,经过查看官方文档还有in这个操作符,用这个实现更简单.直接上代码: 根据查询条件模糊查询所有符合条件的机架列表,然后根据 ...
- django models数据库操作
一.数据库操作 1.创建model表 基本结构 1 2 3 4 5 6 from django.db import models class userinfo(models.M ...
- 03: Django Model数据库操作
目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...
随机推荐
- 自己制作Switch大气层SDFile
️SWITCH SDFILE 每次吃灰之后,就想更新下系统,每次都得研究一遍... 决定好好研究下,发现不是很繁琐. SDFile有哪些文件组成! Atmosphere 任天堂Switch定制固件 H ...
- Linux_Tomcat实战
Tomcat实战 tomcat简述 tomcat安装 部署jspgou项目 tomcat简述 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(A ...
- 20181224蒋嘉豪-exp3-免杀原理与实现
20181224蒋嘉豪-exp3-免杀原理与实现 目录 20181224蒋嘉豪-exp3-免杀原理与实现 课上知识点总结 1.恶意软件检测机制 2.免杀技术综述 Exp3.1 能够正确使用msf编码器 ...
- CSS 常用样式-文本属性
文本类样式我们已经学习过颜色 color 属性,严格来说行高 line-height 也是文本类属性,由于其可以合写在 font 属性中个,暂时先归类到字体中学习,接下来还有几个常用的文本属性. 水平 ...
- elasticsearch第一天
启动 elasticsearch -d不能用以root用户启动 外网可访问在elasticsearch.yml中添加配置http.host: 0.0.0.0network.host: 0.0.0.0d ...
- WEB应用中配置和使用springIOC容器是成功的
Sring web应用学习(1)https://www.cnblogs.com/xiximayou/p/12172667.html
- 递推(dp)纪中真题
前言: 日月如梭,光阴似箭.大家好,我盛艺承又回来了.今天给大家讲一下纪中的DP(递推)真题. 题目描述 在网格中取一个N x 1的矩形,并把它当作一个无向图.这个图有2(N+1)个顶点,有3(N-1 ...
- C语言中分治的思想-位运算
(1) 有101个整数,其中有50个数出现了两次,1个数出现了一次, 找出出现了一次的那个数. 位运算的思想:任何数和零异或得到自己,任何数自己异或得到0. eg1.{2,1,5,1,2,2} num ...
- 3.Vue常用特性
1.表单操作 (1)基于Vue的表单操作 input 单行文本 处理方式就是使用 v-model双向绑定data中的数据 1 <input type="text" v-mod ...
- ajax的async异步执行属性
遇到了一个ajax,看到了一个属性,async,是用来设置同步执行,或者是异步执行的 举一个例子: $.ajax({ async: false, type : "post", ...