最新消息:欢迎光临 魔力 • Python!大家可以点开导航菜单中的【学习目录】,这个目录类似图书目录,更加方便学习!

Django2:Web项目开发入门笔记(7)

Django教程 小楼一夜听春语 9904浏览 0评论

这一篇教程,我们一起来学习Django2中模型的使用。

提示:为了更顺利的学习新的内容,建议大家在PyCharm中重新创建项目和应用。

在之前的教程中,我们已经知道模型(Model)是和数据库相关的。

Django支持多种数据库,包括默认的SQLite3以及MySQL和PostgreSQL等数据库。

使用哪一种数据库需要在项目的settings.py中进行进行配置。

如果使用默认的SQLite3数据库,这个配置是Django创建项目时已经添加好的。

示例代码:

DATABASES = {  # 数据库配置
    'default': {  # 默认数据库
        'ENGINE': 'django.db.backends.sqlite3',  # 数据库引擎设置
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),  # 数据库的路径与名称
    }
}

注意检查一下项目文件夹中是否包含“db.sqlite3”这个数据库文件。

如果没有的话,可以通过PyCharm进行添加。

在项目文件夹上点击鼠标右键,菜单中选择新建(New)-数据源(Data Source),此时会弹出一个窗口。

在这个窗口中,我们可以选择数据库文件的存放路径(Path),直接填写名称即是存放在当前项目文件夹中。

数据库驱动(Driver)选择sqlite(Xerial),然后点击确定(OK)按钮。

在新打开的窗口中,我们可以点击测试链接(Test Connection)测试一下数据库链接是否正常。

点击确定(OK)按钮后,数据库文件就创建好了。

接下来,我们编写模型文件(models.py)的代码。

这里值得一提的是,在更换数据库时,“models.py”中的代码不用做任何更改,只需要在“settings.py”文件中更改数据库的配置。

我们来看一下创建数据库表的流程,就知道为什么这么说了。

创建数据表的流程一共3步:

  • 模型文件(models.py)中编写数据表所对应的类;
  • 通过“manage.py”的“makemigrations”命令创建迁移项;
  • 通过“manage.py”的“migrate”命令创进行迁移。

也就是说,我们在模型文件(models.py)中创建了数据表对应的类,剩下的工作都通过“manage.py”的命令,让Django自动去执行。

一、编写模型文件(models.py)

假设我们创建一个商品信息表。

模型文件(models.py)中,需要创建类以及类的特性(变量),实际上类名对应的是数据库的表名,而特性(变量)对应的是数据表的列(字段)。

示例代码:

class Goods(models.Model):
    goods_name = models.CharField(max_length=30)
    goods_number = models.IntegerField()
    goods_price = models.FloatField()

在上方代码中,我们创建了一些不同类型的字段的对象,包括字符串类型(CharField)、整数类型(IntegerField)和浮点数类型(FloatField)。

字段类型有很多种,例如还有邮箱类型、URL类型等等,大家可以参考官方文档进行使用。

http://www.opython.com/files/docs/django2/ref/models/fields.html

并且,大家能够看到,我们在创建字段对象时还可以输入参数,这些参数在上方文档中也有详尽的描述。

比较常见的参数有几种:

  • max_length:该字段最大字符数量限制。
  • null :如果为True,则该字段默认为null值。
  • blank :如果为True,则该字段可以为空值。
  • default :该字段的默认值。
  • primary_key :该字段设置为主键。
  • unique:该字段的值必须是当前数据列中唯一的。
  • choices:该字段的值为二元数组或列表,例如:((1,2),(a,b))。

当我们编写完模型文件(models.py),接下来就可以进行数据迁移,将模型文件(models.py)中的数据迁移到数据库。

二、创建迁移项与执行迁移操作

在创建迁移项之前,我们需要先在全局配置文件(settings.py)中,将当前应用添加到“INSTALLED_APPS”列表。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'MySite.apps.MysiteConfig',  # 添加此项
    # 'MySite'  # 也可以直接添加应用名称
]

然后,在命令行终端中,通过命令创建迁移项。

python manage.py makemigrations

或者,我们在PyCharm的工具(Tools)中,运行“manage.py”的任务(Run manage.py Task),然后输入命令创建迁移项。

创建迁移项完毕后,会在项目文件夹下的“migrations”文件夹中出现迁移项文件,类似“0001_initial.py”。

接下来,我们再通过“migrate”命令进行数据迁移操作。

python manage.py migrate

或者,在“manage.py”的任务终端中,执行“migrate”命令。

这个命令会将模型文件(models.py)中的数据同步到数据库,完成数据表的创建。

执行的命令与结果:

当我们完成以上步骤,在数据库中就会出现一个名为“MySite_goods”(应用名称_小写类名)的数据表。

不过,在创建数据表的时候,我们可能会遇到这两种情况:

  • “models.py”模块中的类遗漏了某个字段或者某个字段觉得没有用了;
  • “models.py”模块中,类的某个字段写错了类型或者参数。

当发生这样的情况,创建的数据表就不符合要求,而不能正常使用,我们必须修改表的结构,或者更改字段的设置。

那么,如何解决呢?

在Django1.7版本之前,我们需要借助第三方库“South”进行表结构或者字段的修改操作。

而在Django1.7版本开始,“South”已经集成在“Django.core”中。

我们只需要修改“models.py”模块中类的内容,然后再次运行“makemigrations”和“migrate”命令就能够完成修改。

不过要注意的是,如果更改表结构时,是为数据表添加新的字段,在执行“makemigrations”命令时,需要选择一个选项,并输入该字段的默认值。

如果不想在运行命令时这么麻烦,不妨在“models.py”模块中添加新的字段时,直接写入默认值。

例如商品销量字段:

goods_sales = models.IntegerField(default=0)

当我们完成数据表的创建,我们可以尝试进行数据的添加与读取。

大家还记得之前我们学习的SQL语句吗?

相信有很多人都已经记不清了吧!

别担心,我就是想吓你们一跳,喔嚯嚯嚯嚯嚯嚯嚯嚯嚯!

使用Django可以不用SQL语句,就能够实现数据库的增删改查。

不管执行什么数据操作,我们都需要先导入模型文件(models.py)中的类。

在命令行终端我们导入Goods类。

>>>from MySite.models import Goods

然后,通过类进行数据操作。

一、添加数据

添加数据有两种方式,我们分别演示。

第一种:通过create()方法添加。

>>>Goods.objects.create(goods_name='铅笔',goods_number='10',goods_price='1.5')
<Goods: Goods object (1)>

第二种:通过save()方法添加。

>>>g=Goods(goods_name='橡皮',goods_number='20',goods_price='0.5')
g.save()

或者使用另外一种写入参数的方式。

>>>g=Goods()
>>>g.goods_name='直尺'
>>>g.goods_number=15
>>>g.goods_price=2.4
>>>g.save()

二、查询数据

查询数据我们可以使用下列语句。

>>>Goods.objects.all()
<QuerySet [<Goods: Goods object (1)>, <Goods: Goods object (2)>, <Goods: Goods object (3)>]>

通过all()方法,能够获取数据库中所有的数据对象。

那么,能不能看到数据的值呢?

通过values()方法,就能够看到数据库中所有数据的值。

>>>Goods.objects.values()
<QuerySet [{'id': 1, 'goods_name': '铅笔', 'goods_number': 10, 'goods_price': 1.5}, {'id': 2, 'goods_name': '橡皮', 'goods_number': 20, 'goods_price': 0.5}, {'id': 3, 'goods_name': '直尺', 'goods_number': 15, 'goods_price': 2.4}]>

关于数据库的操作,我们到此先告一段落,在下一篇教程中,我们结合URL分发、视图和模板,在浏览器的页面中进行一些对数据的操作。

转载请注明:魔力Python » Django2:Web项目开发入门笔记(7)

头像
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网站 (可选)

网友最新评论 (10)

  1. 头像
    from MySite.models import Goods 导入这一步的时候提示:ImportError: No module named ' 找了好几天没有发现原因
    Frederick7年前 (2018-06-01)回复
    • 小楼一夜听春语
      之前Model名称“GoodsInfo”为笔误,已纠正。
      小楼一夜听春语7年前 (2018-06-19)回复
  2. 头像
    Goods还是GoodsInfo? 这里变得有点快啊
    xingzhui7年前 (2018-06-17)回复
    • 小楼一夜听春语
      谢谢纠正,统一为Goods。
      小楼一夜听春语7年前 (2018-06-19)回复
  3. 头像
    直接在pycharm中的manage.py窗口命令行输入from MySite.models import Goods会报错,应该在终端命令行Terminal中输入python manage.py shell 进入>>>中,再输入from MySite.models import Goods,就不会报错。查了相关文档,说的是“Python启动方式python,会启动交互解释器,需要告诉Django使用哪个设置文件,Django会搜索DJANGO_SETTINGS_MODULE环境变量,它被设置在settings.py中,需要设置为:multiDatabase.settings,用python manage.py shell来启动命令解释器而不是python,因为python manage.py shell中包含了Django使用哪个settings.py文件”
    6年前 (2018-08-25)回复
    • 小楼一夜听春语
      看到“>>>”就要知道是Python 的Shell,这是Python入门中很基础的知识了。 Python的Shell可以通过系统的CMD程序或者PyCharm界面下方的“Terminal”输入“Python”进入,也可以通过PyCharm界面下方的“Python Console”直接启动。
      小楼一夜听春语6年前 (2018-08-25)回复
      • 头像
        通过PyCharm界面下方的“Python Console”是不行的,会报错。还是需要楼上说的 在终端命令行Terminal中输入python manage.py shell 进入>>>中
        oooo6年前 (2019-06-13)回复
        • 头像
          好像是这样 多谢
          Clay5年前 (2020-02-17)回复
  4. 头像
    创建数据表没提示受影响数据库怎么解决?
    6年前 (2018-11-02)回复
  5. 头像
    没有MySite_goods数据表怎么回事?
    哈哈6年前 (2018-11-05)回复