【问题标题】:use python instead of django shell使用 python 而不是 django shell
【发布时间】:2021-03-04 22:06:12
【问题描述】:

我有一个名为航空公司的基本项目,其中包含一个名为航班的应用程序。我创建了一个名为 Flight 的模型。

在一个名为 test.py 的文件中,我有:

from flights.models import Flight

f= Flight(origin="New York",destination="London", duration = 415)
f.save()

为了运行和更新数据库表,我应该把这个文件放在哪里? makemigrations 和 migrate 已成功运行。为了使代码运行,还需要做些什么吗?

【问题讨论】:

    标签: python-3.x django-models django-orm django-migrations


    【解决方案1】:

    您可以定义data migration [Django-doc]。这是您自己进行的迁移,例如添加/更新/删除数据。

    您首先使用以下命令构建迁移文件:

    python manage.py <b>makemigrations --empty</b> <i>flights</i>

    接下来在迁移文件中,您可以定义一个函数来运行并创建Flight 对象:

    from django.db import migrations
    
    def add_flight(apps, schema_editor):
        Flight = apps.get_model('flights', 'Flight')
        Flight.objects.create(origin='New York', destination='London', duration=415)
    
    class Migration(migrations.Migration):
    
        dependencies = [
            ('flights', '0001_initial'),
        ]
    
        operations = [
            migrations.RunPython(add_flight),
        ]

    我们使用apps.get_model('flights', 'Flight') 加载类。这将在迁移的那个时刻构建Flight 的Django 模型。例如,如果您稍后向您的 Flight 添加一个额外的字段,那么只要该迁移没有运行,Flight 就不会有该额外的字段。

    【讨论】:

    • 我想你可能误解了这个问题。我在 models.py 中创建了模型,运行了 makemigrations,然后运行了 migrate。在 django 框架中完成此操作后,我现在想向数据库添加一条记录
    • @DCR:是的。这正是您可以做的。由于您创建了额外的迁移,但不是更改数据库结构,而是添加/更新/删除数据。这就是 数据迁移 的用途。 Django 将因此检查数据库,发现它没有运行此数据迁移,运行它,从而将记录添加到表中。
    • 哇,这看起来真的很令人费解。我正在寻找一种将许多(如 100,000 条)记录添加到数据库的方法。另外,您如何加载课程。我有 0002_auto_20201121_1951.py 文件,代码如图所示,但我该怎么办?
    • @DCR:你运行迁移。 Django 将看到迁移没有运行,运行它,从而创建记录。
    • @DCR:对于大量记录,可以使用bulk_createdocs.djangoproject.com/en/dev/ref/models/querysets/#bulk_create
    猜你喜欢
    • 2019-05-27
    • 2021-12-31
    • 2021-05-31
    • 1970-01-01
    • 2011-11-04
    • 2019-08-09
    • 2019-02-16
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多