首先下载pip install PyMySQL
在__init__文件中进行转换
在setting文件中进行修改,配置数据库
4 创建数据库create database django_demo charsetutf8
配置数据库分三步走
第一步安装数据库驱动,在命令行中执行这条语句
pip install PyMySQL
在Django的工程同名子目录的__init__.py文件中添加如下语句
From pymysql import install_as_MySQLdb
Install _as_MySQLdb()
修改DATABASE配置信息
DATABASE = {
‘default’:{‘ENGINE’:’django.db.backends.mysql’,
‘HOST’:’127.0.0.1’,
‘PORT’:3306,
‘USER’:’root’,
‘PASSWORD’:’mysql’,
‘NAME’:’django_demo’}
在MySQL中创建数据库
Create database django_demo charset=utf8
from django.db import models
# Create your models here.
class BooksInfo(models.Model):
btitle = models.CharField(max_length=20, verbose_name='名称')
bpup_date = models.DateField(verboafse_name='发布日期')
bread = models.ImageField(default=0, verbose_name='阅读量')
bcomment = models.ImageField(default=0, verbose_name='评论量')
is_delete = models.BooleanField(default=False, verbose_name='删除逻辑')
class Meta:
db_table = 'tb_books'
verbose_name = '图书'
verbose_name_plural = verbose_name
def __str__(self):
return self.btitle
class HeroInfo(models.Model):
GENDER_CHOICES = (
(0, 'male'),
(1, 'female')
)
hname = models.CharField(max_length=20, verbose_name='名称')
hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')
hcomment = models.CharField(max_length=200,null=True, verbose_name='描述信息')
hbook = models.ForeignKey(BooksInfo, on_delete=models.CASCADE, verbose_name='图书')
is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
class Meta:
db_table = 'tb_heros'
verbose_name = '英雄'
verbose_name_plural = verbose_name
def __str__(self):
return self.hname
在class Meta:下指定表名
属性命名限制不能使用python保留的关键字。
不能使用连续的下划线,这是由于Django的查询方式决定的定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法格式是这样的
属性=models.字段类型(选项)
在设置外键时,需要通过on_delete选项指明主表删除数据时,对外建引用表数据如何处理,在django.db.models中包含了可选常量。
- CASCADE 级联,删除主表数据时连通一起删除外键表中数据
- PROTECT 保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据
- SET_NULL 设置为NULL,仅在该字段null=True允许为null时可用
- SET_DEFAULT 设置为默认值,仅在该字段设置了默认值时可用
- SET() 设置为特定值或者调用特定方法,如
DO_NOTHING 不做任何操作,如果数据库前置指明级联性,此选项会抛出IntegrityError异常
数据模型创建好了就需要进行迁移,将模型同步到数据库中。
首先先生成迁移文件,
python manage.py makemigrations
第二步同步到数据库中
python manage.py migrate
数据库的查询:
全部查询BooksInfo.objects.all()
All()获取多个对象
.get()查询单一结果
获取的是一个book对象
然后可以获取对象的属性
查询数量
过滤查询
filter()过滤出多个对象,列表遍历可以取出单个的对象。
相等exact:表示判等
模糊查询
空查询:
范围查询:
比较查询:
不等于编号查询
日期查询:
如果没有返回空。
F对象
查询阅读量大于等于评论量的图书。
在F对象上使用算数运算。
Q对象
多个过滤器逐个调用表示逻辑与关系,同SQL语句中的Where部分的and关键字
比如:查询阅读量大于20,并且编号大于3的图书。
如果需要实现逻辑或or的查询需要使用Q()对象结合|运算符,
查询阅读量大于20,的图书
查询阅读量大于20,或编号小于3的图书,只能使用Q对象实现
查询编号不等于3的图书
聚合函数使用aggregate()过滤器调用聚合函数。聚合函数包括Avg平均,count数量,Max最大,Min最小,Sum求和,被定义在django.db.models中。
查询图书的总阅读量。
得到的结果是一个字典形式的数据
排序
使用order_by进行排序
降序排序
关联查询
由一到多的访问语法
一对应的模型对象。多对应的模型类名小写_set
由多到一的访问语法:
多对应的模型类对象.多对应的模型类中的关系类属性名
关联过滤查询:
由多模型类条件查询一模型数据:
语法如下:
关联模型类名小写_属性名_条件运算符=值
注意:如果没有“_运算符”部分,表示等于。
查询图书,要求图书中英雄的描述包含“八”
由一模型类条件查询多模型类数据:
语法如下:
一模型类关联属性名__一模型类属性名__条件运算符=值
注意:如果没有“__运算符”部分,表示等于。例如:
查询书名为“天龙八部”的所有英雄
查询阅读量大于30的所有英雄
修改
跟新修改有两种方法
1save
修改模型类对象的属性,然后执行save()方法
使用update使用模型类.objects.filter().update(),会返回受影响的行数
删除
删除有两种方法