pycharm连接mysql数据库

pycharm与数据库图形化交互方式

  1. 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建表

  1. 在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='年龄')
  1. 执行数据库迁移命令
  • 只有执行了数据库迁移命令,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之数据库操作入门的更多相关文章

  1. C语言与数据库操作入门

    https://blog.csdn.net/flyingqd/article/details/78763652 C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1 ...

  2. C语言与数据库操作入门(Win版)

    C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1387 数据库,DataBase,学C语言的是不是想说,很想爱她却并不容易呢?不用着急,C语言也可以操作数据库的 ...

  3. Django 2.0 学习(16):Django ORM 数据库操作(下)

    Django ORM数据库操作(下) 一.增加表记录 对于表单有两种方式: # 方式一:实例化对象就是一条表记录france_obj = models.Student(name="海地&qu ...

  4. Django 2.0 学习(14):Django ORM 数据库操作(上)

    Django ORM 数据库操作(上) ORM介绍 映射关系: 数据库表名 ---------->类名:数据库字段 ---------->类属性:数据库表一行数据 ----------&g ...

  5. Django与数据库操作

    Django与数据库操作 数据库连接的方法 web 框架 django --- 自己内部实现 (ORM) + pymysql(连接) Flask,tornado --- pymysql SQLArch ...

  6. django models 数据库操作

    django models 数据库操作 创建模型 实例代码如下 from django.db import models class School(models.Model): pass class ...

  7. Django模型-数据库操作

    前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...

  8. django中数据库操作——in操作符

    django一对多关系中,为了实现按照一端查询多端,之前都是用extra操作符,经过查看官方文档还有in这个操作符,用这个实现更简单.直接上代码: 根据查询条件模糊查询所有符合条件的机架列表,然后根据 ...

  9. django models数据库操作

    一.数据库操作 1.创建model表         基本结构 1 2 3 4 5 6 from django.db import models     class userinfo(models.M ...

  10. 03: Django Model数据库操作

    目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...

随机推荐

  1. Hive+spark工业化项目

    DolphinScheduler:国产调度平台 airflow: 调度平台

  2. Java中double保留2位小数(精度丢失)的两种方式

    Java中double保留2位小数(精度丢失)的两种方式 在我们日常开发中,使用double数据类型进行计算,偶尔会出现精度丢失的情况,例如实际结果是0.75,就可能出现0.7500000000000 ...

  3. 小梅哥课程学习——串口发送应用之发送数据(可在vivado中仿真出现正确波形)

    //1.底层代码源代码发送10位数据 module uart_pr( clk, reset_n, send_go, data, baud_set, tx_done, uart_tx ); input ...

  4. elasticsearch第一天

    启动 elasticsearch -d不能用以root用户启动 外网可访问在elasticsearch.yml中添加配置http.host: 0.0.0.0network.host: 0.0.0.0d ...

  5. P2504 聪明的猴子

    题目描述 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水面上.猴子不会游泳,但跳跃能力比较强,它们仍然可以 ...

  6. Vue+SSM+Element-Ui实现前后端分离(1)

    前言:最近学习vue,就突发奇想,小菜鸟的我是时候锻炼锻炼自己.闲话不说,整起 <-_-> 整体规划:先搭建前端,接下来后端,最后整合. 一.创建vue项目 1.安装nodejs( 傻瓜式 ...

  7. 01.数据库基础、JDBC

    一.数据库 数据库:用于存储和管理数据的仓库. 数据库的特点 持久化储存数据,数据库就是一个文件系统. 方便储存和管理数据. 使用了统一的方式操作数据库--SQL. 配置 Mysql 服务启动 手动 ...

  8. 剑指Offer2---------替换空格

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy.   重点: ...

  9. spring-boot项目布到tomcat容器下部署

    一.修改打包形式 在pom.xml里设置 `war` <packaging>war</packaging> 二.移除嵌入式tomcat插件 在pom.xml里找到spring- ...

  10. Sql Server代理作业、定时任务

    需求: 本次需求为每15分钟获取一次思路为,创建结果表,代理作业定时更新数据并存入结果表,后端只需要调用结果表数据数据,如果超期不同的天数则给出不同的提示信息,因为没有触发点,所以用到了本文内容. 右 ...