django的数据库的操作

 

首先下载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(),会返回受影响的行数

删除

删除有两种方法

 

猜你喜欢

转载自blog.csdn.net/Qyl3328001/article/details/81389838