Django 连接MySQL及数据操做

Django 连接MySQL

Django建立的项目自带的数据库是SQLite3,咱们想要连接MySQL的话,须要更改settings.py中的配置python

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

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

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 配置成MySQLsql

注意:重点!重点!重点!数据库

import pymysql

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

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

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对象关系映射app

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

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

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

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

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

# 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()
相关文章
相关标签/搜索