当前位置:   article > 正文

Python进阶3:Django2-数据库管理/后台管理/前台管理_python django h2

python django h2


本文暂时用SQLite,方便调试,后期更换为Mysql

1.项目数据库的管理

1.1 创建数据库模型

  • 数据库选择SQLite,基于OR面向对象的方式映射,进行增删改查
  • 本示例完成“图书-英雄”信息的维护,需要存储两种数据:图书、英雄
  1. 图书表结构设计: 表名: Book
  • 图书名称: title
  • 图书发布时间: pub_date
  1. 英雄表结构设计: 表名: Hero
  • 英雄姓名: name
  • 英雄性别: gender
  • 英雄简介: hcontent
  • 所属图书: hbook

图书-英雄的关系为一对多

在bookApp下的models.py中编辑:
定义数据库模型
在这里插入图片描述

在设置中添加要实现的app,设置子应用:
在这里插入图片描述

为新应用设置迁移脚本:python manage.py makemigrations
在这里插入图片描述
将迁移脚本应用至数据库中:python manage.py migrate
在这里插入图片描述
刷新上一篇中建好的数据库:
在这里插入图片描述

在这里插入图片描述

设置一对多:
在这里插入图片描述
将迁移脚本应用至数据库中:python manage.py migrate
在这里插入图片描述
将迁移脚本应用至数据库中:python manage.py migrate
在这里插入图片描述
刷新数据库出现刚才新建的表:
在这里插入图片描述
总结:对项目的数据库模型操作

  1. 若是Mysql数据库,安装完Mysql后还需要更改配置文件,暂时不需要更改;
  2. 创建对应的数据库模型,在models.py中编写。通过ORM映射的关系实现,通过面向对象的方式进行增删改查;
  3. 具体就是创建数据库模型,将生成的子应用加到配置文件中,然后生成迁移脚本,以及应用到数据库中,再进行检查是否成功添加

1.2 数据库模型基本操作(增删改查)

  • 本节针对书籍做增删改查的操作,下一节对书中的人物做操作;
  • 首先在terminal中安装一个界面更友好的解释器(不装也行):pip install ipython
  • 进入交互式的Python shell,并使用 Django 提供的免费 API:python manage.py shell

1.2.1 导入数据库

In [1]: from bookApp.models import Book ,Hero

In [2]: # 查看操作

In [3]: Book.objects.all()					#查看数据集,此时还未添加,所以返回为空
Out[3]: <QuerySet []>

In [4]: Hero.objects.all()					#与上同理
Out[4]: <QuerySet []>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

1.2.2 增加数据信息

在数据库中增加一本书叫西游记,并且包含发布日期:

In [2]: # 查看操作

In [3]: Book.objects.all()
Out[3]: <QuerySet []>

In [4]: Hero.objects.all()
Out[4]: <QuerySet []>

In [5]: # 2.增加数据信息

In [6]: # 数据库表中的一条记录对应OOP里面的一个object

In [7]: b1 = Book()

In [8]: b1.name = "西游记"

In [9]: from datetime import date

In [10]: d1 = date(2000,1,4)

In [11]: b1.pub_date = d1

In [12]: b1.save()

In [13]: Book.objects.all()
Out[13]: <QuerySet [<Book: Book object (1)>]>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

最后的结果查看中虽然能看到包含有一本书,但是不能看到书名,在此调整应用models.py文件:

from django.db import models

# Create your models here.
#类对应数据库表,表名称默认为bookApp_book.
class Book(models.Model):
    #属性对应数据库表的列名,默认会添加id这一列
    name = models.CharField(max_length=40,verbose_name="书籍名称")
    pub_date = models.DateField(verbose_name="出版日期")
    #魔术方法,字符串友好展示,便于调试代码
    def __str__(self):
        return  self.name

#类对应数据库表,表名称默认为bookApp_hero
class Hero(models.Model):
    # 属性对应数据库表的列名,默认会添加id这一列
    gender_choice = [
        (1,'男'),
        (2,'女')
    ]
    name = models.CharField(max_length=20, verbose_name="人物名称")
    #性别只能选择男(1)或者女(2)
    gender = models.IntegerField(choices=gender_choice, verbose_name="性别")
    content = models.TextField(max_length=1000, verbose_name="人物描述")
    # 外键关联,如果删除书籍时,相关hero对应的书籍设置为空
    Book = models.ForeignKey(Book,on_delete=models.SET_NULL,null=True, verbose_name="书籍id")
    # 魔术方法,字符串友好展示,便于调试代码
    def __str__(self):
        return  self.name
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

此处因为新加了功能,所以需要重新启动shell:

In [1]: from bookApp.models import Book,Hero

In [2]: Book.objects.all()
Out[2]: <QuerySet [<Book: 西游记>]>
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
再增加一个:

from bookApp.models import Book,Hero

In [2]: Book.objects.all()
Out[2]: <QuerySet [<Book: 西游记>]>

In [3]: from datetime import date

In [5]: b2 = Book(name="红楼梦",pub_date=date(1998,4,1))

In [6]: b2.save()

In [7]: Book.objects.all()
Out[7]: <QuerySet [<Book: 西游记>, <Book: 红楼梦>]>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

步骤:

  1. 在terminal中进入Django的交互式shell:python manage.py shell
  2. 导入时间模块(需要添加书籍的导入时间):from datetime import date
  3. 按照models中定义的格式增加新的书籍信息:b2 = Book(name="红楼梦",pub_date=date(1998,4,1))
  4. 保存b2.save()
  5. 查看:Book.objects.all()

1.2.3 查看数据库信息

# 3.根据条件搜索并查看

In [9]: Book.objects.filter(name="西游记")
Out[9]: <QuerySet [<Book: 西游记>]>

In [11]: b1 = Book.objects.filter(name="西游记")

In [12]: b1
Out[12]: <QuerySet [<Book: 西游记>]>

In [13]: b1 = Book.objects.filter(name="西游记").first()

I
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/865212
推荐阅读
相关标签
  

闽ICP备14008679号