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文件中操做
1.增长表,增长对应的类便可
2.给表增长字段或修改字段,找到对应的类,调整类属性的参数便可,例
# 默认全部列都是非空,容许为空,null=True book_price = models.IntegerField(null=True) # 默认全部列没有默认值,增长默认值,default=默认值 press_addr = models.CharFiels(default='aaa')
3.删除表,将对应的类注释便可
以上操做,都要执行!!!处理完毕后,执行数据库迁移(同步)命令
1.数据操做-查询
# 当前类是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方法若是没有获取到结果,不会报错,返回的是一个空列表
# 等同于 select * from book # 返回值是一个列表,支持索引,但不支持负索引 res = models.Book.objects.all()
2.数据操做-增长
# create() 有返回值,是当前被建立的对象自己 book_obj = Book.objects.create(book_name='Django入门', book_price=1234) # 打印建立的对象, 对象的book_name 属性 print(book_obj, book_obj.book_name)
# 建立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() 的返回值是一个列表,这个方式至关因而批量修改
# 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()