Django 学习 Blog 实操 03 --- Django 数据迁移、命令行操作数据库练习

本文详细介绍了如何使用Django进行数据库迁移,包括创建、查看、应用迁移文件,以及在Python shell中进行数据的增删改查操作。通过实例展示了如何创建数据模型,以及在遇到字段不匹配时如何调整模型并重新迁移。此外,还记录了在尝试创建ManyToManyField时遇到的错误,提醒读者注意正确的创建方式。
摘要由CSDN通过智能技术生成

一、本次任务

  • 理解 django 迁移数据的命令
  • 命令行可以 CRUD(增删改查) 数据
  • 记录操作中的错误或问题

二、代码汇总

# django 操作数据
pipenv run python manage.py makemigrations  # 生成一个migrations文件夹,该文件夹的内容就是数据库要执行的内容
pipenv run python manage.py migrate  # 执行之前生成的migrations文件,真正的是操作数据库
# 备注:Django 每次更新模型都需要执行以上两步

pipenv run python manage.py sqlmigrate blog 0001  # 查看 app 的 0001 迁移文件的执行 sql
pipenv run python manage.py shell  # 打开 python 交互模式
# Django 操作数据库命令
from blog.models impot Category, Tag, Post

# 创建/新增数据
c = Category(name='category  test')
c.save()

# 获取数据
c = Category.objects.get(name='category  test')
cc = Category.objects.all()

# 修改/更新数据
c.name = 'category test new'
c.save()

# 删除数据
c.delete()

三、操作截图

设置数据库

使用了 Python 内置的 SQLite3 数据库。
位置:blogproject/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

数据迁移

pipenv run python manage.py makemigrations

"""
执行了 python manage.py makemigrations 后,django 在 blog 应用的 migrations\ 目录下生成了一个 0001_initial.py 文件,这个文件是 django 用来记录我们对模型做了哪些修改的文件。

只是告诉了 django 我们做了哪些改变,并没有真正地为我们创建数据库表。
"""

makemigrations

pipenv run python manage.py migrate

"""
让 django 真正地创建数据库表,执行了python manage.py migrate 命令。django 检测应用中 migrations\ 目录下的文件,得知我们对数据库做了哪些操作,然后把这些操作翻译成数据库操作语言,从而把这些操作作用于真正的数据库。

命令的输出除了 Applying blog.0001_initial... OK 外,django 还对其它文件做了操作。这是因为除了我们自己建立的 blog 应用外,django 自身还内置了很多应用,这些应用本身也是需要存储数据的。可以在 settings.py 的 INSTALLED_APP 设置里看到这些应用。
"""

migrate

pipenv run python manage.py sqlmigrate blog 0001

sqlmigrate

创建数据操作

pipenv run python manage.py shell

python shell

from blog.models import Category, Tag, Post
c = Category(name='category test')
c.save()
t = Tag(name='tag test')
t.save()

django create data

pipenv run python manage.py createsuperuser
再打开一个窗口,避免麻烦,数据都是从数据库读取的,所以这样做是可以的。

django createsuperuser

# 操作失误
# 模型中的字段跟创建时的字段不一致导致的

create data error

pipenv run python manage.py makemigrations
# 因为model改变了,所以需要这一步通知 django

once more makemigrations

pipenv run python manage.py migrate
# 需要将改变应用到数据库。

once more migrate

pipenv run python manage.py sqlmigrate blog 0002

once more sqlmigrate

# 错误记录
ManyToManyField 创建的时候不能这样创建,特此记录

获取数据操作

获取一条数据

# 获取一条数据,如果返回有多条或者没有数据,报错
Category.objects.get(name='category test')
# 截图中的错误是 ManyToManyField 不能这样创建数据。

recored error manytomanyfield

获取全部数据

Category.objects.all()
Tag.objects.all()
Post.objects.all()

get all data

# 这张图片跟上面一张图片的区别是,在没有关闭命令行的前提下,代码中添加了 __str__
# 方法,但是重新获取全部数据不能看到返回的字符串。
# exit() 退出shell,重新进入,重新引入就可以了。

__str__  not work

def __str__(self):
	reurn self.name

__str__ Category Tag
__str__ Post

pipenv run python manage.py shell

__str__ work

更新数据操作

update data

删除数据操作

删除一条数据

del one record

删除多条数据

del data

附上 Gitee 地址:https://gitee.com/langxing/HelloDjango-blog-tutorial

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sapphire~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值