zoukankan      html  css  js  c++  java
  • django连接mysql数据库

    一、python虚拟环境中安装pymysql(已安装可以跳过此步)

       1. 查看所有的python虚拟环境

        命令:workon

        

      2. 进入你的项目所在的虚拟环境

       命令: workon hello_django

       

         前面变成hello_django即代表使用了hello_django这个python虚拟环境

      3. 查看已安装的第三方库的列表

       命令: pip list

       

      4. 如果已经安装的第三方库中没有pymysql这个第三方库,则安装(需要注意的是django2.2版本的暂时还不支持pymysql,所以如果使用的话,需要先降到2.1版本,不然可能会报错)

         命令: pip   install    django==2.1.0

         命令: pip   install    pymysql

       

       

      5. 安装成功后的第三方库

       

    二、在主项目的文件中设置连接

       1. 在项目主目录下的init文件中添加下面两句代码

    import pymysql  # 导入第三方模块,用来操作mysql数据库
    
    pymysql.install_as_MySQLdb()

        需要注意的是,如果你import   pymysql的时候下面有红线,并且你已经在你使用的python虚拟环境中安装好了pymysql模块,那么你可以重新打开一下你的项目:点击一下  File---> close  project ---->  然后再打开你使用的项目,这时import 导入pymysql就不会报错了。

      2. 在settings文件中设置数据库连接

    # 配置数据库
    DATABASES = {
        'default': {
            # python自带的一个数据库,基本不会被使用
            # 'ENGINE': 'django.db.backends.sqlite3',
            # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
            # 注册我们自己使用的数据库连接
            'ENGINE': 'django.db.backends.mysql',  # 数据库引擎
            'NAME': 'mydb', #数据库名称
            'USER':'admin', # 连接数据库的用户名称
            'PASSWORD':'Root110qwe',  # 用户密码
            'HOST':'192.168.152.154', # 访问的数据库的主机的ip地址
            'PORT':'3306', # 默认mysql访问端口
        }
    }

        需要注意的是,host需要写成你的数据库所在的主机或虚拟机的ip地址,如果是在本机上或者是virtualbox中设置了端口转发可以使用127.0.0.1即可。

    三、创建好数据库模型类

      1. 创建模型类(找到你需要使用模型的项目中的任意app的目录下的models文件)

    from django.db import models
    
    # Create your models here.
    
    # 创建模型类
    class  Meishi(models.Model):
        id = models.AutoField(primary_key=True)  # 该字段可以不写,它会自动补全
        food_name = models.CharField(max_length=30) # 设置食物名称
        food_author = models.CharField(max_length=8) # 设置食物制作人
        food_money = models.FloatField()  # 设置食物价格
        food_star = models.CharField(max_length=10,default='普通') # 设置食物美味程度
    
        def __str__(self):  # 重写直接输出类的方法
            return "<Meishi:{id=%s,food_name=%s,food_author=%s,food_money=%s,food_star=%s}>"
                   %(self.id,self.food_name,self.food_author,self.food_money,self.food_star)

      2. 将我们创建好的模型类映射到数据库

        壹:

          直接在命令行执行命令 : python    manage.py   makemigrations    或     python    manage.py   makemigrations   app_name

          可以指定你的项目中的app的名字;也可以不指定,直接映射该项目中全部的app中的表模型

        贰:

          在pycharm中运行 Run  manage.py    Task  然后输人makemigrations   或  makemigrations   app_name  同上面的效果是一样的

          

          

      3. 将我们映射的数据表真正在数据库中创建的对应的表

        壹:

          直接在命令行执行命令 : python    manage.py   migrate    或     python    manage.py   migrate    app_name

          可以指定你的项目中的app的名字;也可以不指定,直接创建项目中所有app下映射好的表

        贰:

          在pycharm中运行 Run  manage.py    Task  然后输人migrate   或  migrate   app_name  同上面的效果是一样的

           

          

        现在我们在数据库中就可以看到我们创建的表了,效果图如下:

          

        数据库中创建的表的名称是以项目中app的名称+我们自己创建的表的模型类的类名组合成的。

          可以通过desc  表名的命令查看表结构就是我们在模型类中设置的表结构:

              

    四、创建好对数据库增删改查的视图渲染方法

      1. 在项目使用的app目录下的views.py文件中写增删改查的方法

    from django.shortcuts import render        # 可以用来返回我们渲染的html文件
    from django.http import HttpResponse       # 可以返回渲染的页面
    from .models import Meishi                 # 导入我们的模型类
    # Create your views here.
    
    # 添加数据方法
    def add_food(request):
        # 第一种方式插入数据
        tcpg = Meishi(food_name='糖醋排骨',food_author='一一',food_money=25,food_star='美味')
        tcpg.save()   # 一定要记得保存,不然数据无法插入进去
        # 第二种方式插入数据
        lzj = Meishi()
        lzj.food_name = '辣子鸡'
        lzj.food_author = '张三'
        lzj.food_money = '30'
        lzj.food_star = '超级美味'
        lzj.save()   # 一定要记得保存,不然数据无法插入进去
        # 第三种方式插入数据(该方法不需要保存,会自动保存)
        sltds = Meishi.objects.create(food_name='酸辣土豆丝',food_author='一一',food_money=25,food_star='美味')
        # 第四种方式插入数据(该方法不需要保存,且不会插入重复数据)
        clbc = Meishi.objects.get_or_create(food_name='醋溜白菜',food_author='李四',food_money=25,food_star='很美味')
        return HttpResponse("添加数据成功")
    
    # 查询数据方法
    def select_food(request):
        # 查询表中的所有数据
        rs = Meishi.objects.all()
        print(rs)
        # 根据筛选条件查询出表中的单挑数据(注意如果条件查询出多条数据,使用该语句会报错)
        rs1 = Meishi.objects.get(food_name='醋溜白菜')
        print(rs1)
        # 根据筛选条件查询出表中的数据(可查询出多条)
        rs2 = Meishi.objects.filter(food_author="一一")
        rs2 = list(rs2)
        print(rs2)
        return HttpResponse("查询数据成功")
    
    # 更新数据方法
    def update_food(request):
        # 根据条件查询后再修改再保存
        clbc = Meishi.objects.get(food_name='醋溜白菜')
        clbc.food_star = '难吃'
        clbc.save()
        # 直接修改所有的数据
        Meishi.objects.all().update(food_star='美味')
        return HttpResponse("修改数据成功")
    
    # 删除数据方法
    def delete_food(request):
        Meishi.objects.get(id=1).delete()
        return HttpResponse("删除数据成功")

      2. 在项目中对应app下的urls文件中配置对应的路由

    from django.urls import path,include  # path设置我们的路由,include可以设置我们的分路由
    from . import views  # 将我们写好的views文件导入
    
    urlpatterns = [   # 我们这个app的所有路由都会写在这个文件下
        path("add_food/",views.add_food),
        path("select_food/",views.select_food),
        path("update_food/",views.update_food),
        path("delete_food/",views.delete_food),
    ]

    五、前端显示

       这个时候我们通过我们设置的路由即可对数据库中的表进行增删改查操作:

        http://192.168.152.154:8000/models_learn/add_food/

        http://192.168.152.154:8000/models_learn/select_food/

        http://192.168.152.154:8000/models_learn/update_food/

        http://192.168.152.154:8000/models_learn/delete_food/

    #  该文章仅为个人学习笔记,有出错之处请多多指正。

  • 相关阅读:
    从零打造树莓派智能助手(一)——让树莓派说话
    以np.concatenate为主题,谈谈numpy数组按维度合并的问题
    树莓派apt报错:E: 'Release' 这个值对 APT::Default-Release 是无效的,因为在源里找不到这样的发行
    我遇到的一些Git问题汇编
    在Mac平台用Sublime编辑器使用Git并连接github
    LeetCode108——Convert Sorted Array to Binary Search Tree
    LeetCode122——Best Time to Buy and Sell Stock II
    LeetCode686——Repeated String Match
    Python爬虫 — 百度翻译
    HTTP 协议
  • 原文地址:https://www.cnblogs.com/wangyusu/p/11099573.html
Copyright © 2011-2022 走看看