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. xShell执行js脚本

    var CMD = 'ls'; var INTERVAL = 1; var MAX = 5; var CR = String.fromCharCode(13); var LF = String.fro ...

  2. Vue项目目录树

  3. poi解析Excel2007海量数据

    处理excel,开源的javaApI提供了两种,一种是jxl,一种是poi.poi提供的功能较多,所以我用的是poi. poi有两种模式,一个是用户模式(HSSFworkbook:支持Excel200 ...

  4. 使用idea从零编写SpringCloud项目-Ribbo

    git:https://github.com/bmdcheng/product_server git:https://github.com/bmdcheng/order_server 1.需要创建两个 ...

  5. Sublime Text3汉化好的绿色免安装版使用和破解教程+下载链接

    这个资源是我从官网上面下载好的Sublime Text3绿色版,然后通过网上的教程汉化之后再压缩的.理论上下载完之后,解压就可以用了,不过由于是绿色版,可能需要调一下默认打开方式.才好直接双击打开.绿 ...

  6. 9.22 2020 实验 3:Mininet 实验——测量路径的损耗率

    一.实验目的 在实验 2 的基础上进一步熟悉 Mininet 自定义拓扑脚本,以及与损耗率相关的设定:初步了解 Mininet 安装时自带的 POX 控制器脚本编写,测试路径损耗率.   二.实验任务 ...

  7. dockerflie

    FROM newbe36524/aspnet:5.0-buster-slim AS base ENV TZ=Asia/Shanghai WORKDIR /app EXPOSE 3400 3400 RU ...

  8. 财开心批量处理系统V4.0

    前言 上次分析了亿企代账对他的发票提取有很大兴趣,同时下载了几大财务厂商提供的发票提取,很多都是采用的这个,如云账房销项提取插件还有本次研究的财开心批量处理系统 分析 demo 直接用亿企代账分析的代 ...

  9. vue省市区级联

    省市区级联 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...

  10. Java8中Stream()流的用法总结

    简单的集合遍历 foreach遍历 import java.util.ArrayList; import java.util.List; /** * @author rx * @date 2022/6 ...