使用 python 而不是 django shell
Posted
技术标签:
【中文标题】使用 python 而不是 django shell【英文标题】:use python instead of 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 已成功运行。为了使代码运行,还需要做些什么吗?
【问题讨论】:
【参考方案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_create
:docs.djangoproject.com/en/dev/ref/models/querysets/#bulk_create以上是关于使用 python 而不是 django shell的主要内容,如果未能解决你的问题,请参考以下文章
python django ajax:ValueError:视图没有返回 HttpResponse 对象。它返回 None 而不是