zoukankan      html  css  js  c++  java
  • Django 链接MySQL及数据操作

    Django 链接MySQL

    Django创建的项目自带的数据库是SQLite3,我们想要链接MySQL的话,需要更改settings.py中的配置

    1.在MySQL中创建好数据库,Django项目不会创建数据库只会根据models.py中的模型类创建对应的表

    2.在项目文件下的settings.py文件中,找到 DATABASES属性,配置MySQL相关参数

    DATABASES = {
        'default': {
            # 将数据库引擎修改成 mysql
            'ENGINE': 'django.db.backends.mysql',
            # 数据库名称
            'NAME': 'django_test',
            # 数据库所在的主机地址
            'HOST': '127.0.0.1',
            # MySQL服务的端口号
            'PORT': 3306,
            'USER': 'root',
            'PASSWORD': 'Ad123',
            'CHARSET': 'utf8'
        }
    }
    

    3.找到项目文件下或app(应用程序)下的__init__.py 配置成MySQL

    注意:重点!重点!重点!

    import pymysql
    
    # 将数据库引擎调整为MySQL
    pymysql.install_as_MySQLdb()
    

    4.在对应的app(应用程序)下的 models.py 文件中编写数据库表对应的类

    from django.db import models
    
    # 模型类都需要继承 models.Model 类
    class Book(models.Model):
        # AutoField 表示是int数据类型,auto_increment自增长列,primary_key 表示主键 
        b_id = models.AutoField(primary_key=True)
        # CharField 表示varchar数据类型,必须给 max_length 赋值,表示字符长度
        book_name = models.CharField(max_length=64)
        # IntegerField 表示int数据类型, default 表示默认值
        book_price = models.IntegerField(default=0)
    

    这里运用的就是ORM对象关系映射

    ORM(Object Relational Mapping) 对象关系映射:通过使用描述对象和数据库之间映射的方式,将面向对象语言程序中的对象自动持久化到关系数据库中。

    本质上就是将数据从一种形式转换到另外一种形式,通俗来讲,能够让一个不会数据库操作的小白也能通过Python面向对象语法,句点符(对象.属性)来简单快捷的操作数据

    Python MySQL
    类(class) 数据表(table)
    对象(object) 记录(数据表中的一行记录)
    属性(attribute) 表字段(column)

    5.在cmd或pycharm中的Terminal窗口执行数据库迁移(同步)命令

    注意:重点!重点!重点!

    # python3 是python解释器名称
    # 将对数据库的操作记录到项目中的migrations文件夹下的文件中,此时并没有同步到到数据库
    python3 manage.py makemigrations
    # 将对数据库的操作同步到MySQL中
    python3 manage.py migrate
    
    • 一定要在对应的项目文件下执行这两条命令
    • 这两条命令一般情况下,是成对出现的,缺一不可
    • 在开发过程中,只要修改了models.py 中跟数据库相关的代码,就必须重新执行这两命令,以保证数据库中的记录跟models.py中一致


    Django 表操作-增删改

    在models.py文件中操作

    1.增加表,增加对应的类即可

    2.给表增加字段或修改字段,找到对应的类,调整类属性的参数即可,例

    # 默认所有列都是非空,允许为空,null=True
    book_price = models.IntegerField(null=True)
    # 默认所有列没有默认值,增加默认值,default=默认值
    press_addr = models.CharFiels(default='aaa')
    

    3.删除表,将对应的类注释即可

    以上操作,都要执行!!!处理完毕后,执行数据库迁移(同步)命令


    Django 数据操作-查增删改

    1.数据操作-查询

    • models.类名.objects.filter() 条件查询
    # 当前类是Book类
    # filter() 有返回值,是一个列表;没有参数(查询所有)或多个参数,参数之间关系对应SQL语句为:where 参数1=参数值1 and 参数2=参数值2 and …… and 参数n=参数值n
    # res = models.Book.objects.filter(book_name='钢铁是怎样炼成的')
    # select * from book where book_name='青年文摘' and book_price=1234;
    res = models.Book.objects.filter(book_name='青年文摘', book_price=1234)
    # 可通过索引取值但是索引不能为负数,不推荐使用索引取值,可使用first()
    book_obj = res.first()  # 取第一条记录
    

    注意:filter方法如果没有获取到结果,不会报错,返回的是一个空列表

    • models.类名.objects.all() 查询所有
    # 等同于 select * from book
    # 返回值是一个列表,支持索引,但不支持负索引
    res = models.Book.objects.all()
    

    2.数据操作-增加

    • 类.objects.create()
    # create() 有返回值,是当前被创建的对象本身
    book_obj = Book.objects.create(book_name='Django入门', book_price=1234)
    # 打印创建的对象, 对象的book_name 属性
    print(book_obj, book_obj.book_name)
    
    • 创建对象,通过对象.save()
    # 创建Book 对象
    book_obj = Book(book_name='redis入门', book_price=4321)
    # 通过对象.save()方法增加记录
    book_obj.save()
    

    3.数据操作-删除

    '''
    1.先查询出结果,
    2.通过delete() 删除
    '''
    # sql语句:delete from book where b_id=2;
    models.Book.objects.filter(b_id=2).delete()
    # 由于filter() 的返回值是一个列表,这个方式相当于是批量删除,不建议删除记录
    

    4.数据操作-修改

    • 批量更新(推荐使用该方法)
    '''
    1.先查询出结果
    2.通过update() 更新
    '''
    # sql语句:update book set book_name='aa', book_price=2314 where b_id=3;
    models.Book.objects.filter(b_id=3).update(book_name='aa',book_price=2314)
    # 由于filter() 的返回值是一个列表,这个方式相当于是批量修改
    
    • 先获取数据对象,再修改对象属性,调用对象的绑定方法save()保存(了解即可,不推荐使用)
    # 1.获取数据对象
    book_obj = models.Book.objects.filter(b_id=3).first()
    # 2.修改对象属性
    book_obj.book_name = 'bb'
    book_obj.book_price = 3124
    # 3.调用对象的绑定方法 save
    book_obj.save()
    
  • 相关阅读:
    面试遇到的相关问题
    webpack的学习之旅
    ajax请求数据
    css选择器
    对BFC的理解
    对React的理解
    获取DOM的真实节点
    翻转拼图网页小游戏制作
    acm比赛刷题小技巧
    动态规划 背包九讲的实现。
  • 原文地址:https://www.cnblogs.com/xiaodan1040/p/12154011.html
Copyright © 2011-2022 走看看