Django 2.0 使用脚本填充数据库

新手上路,请多包涵

我试图用脚本填充我的 Django 数据库,这样我就不必手动输入数据。到目前为止,我有以下内容:

 from my_app.models import ModelInApp
import django

django.setup()

def add_data(data1, data2):
    d, created = ModelInApp.objects.get_or_create(data1=data1, data2=data2)
    print("- Data: {0}, Created: {1}".format(str(d), str(created)))
    return d

def populate():
    # data is a list of lists
    for row in data:
        data1 = row[0]
        data2 = row[1]
        add_data(data1, data2)

if __name__ == "__main__":
    populate()

data 变量是一个列表列表,其中包含我要放入数据库中的数据。问题是,当我运行脚本时,出现 django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet. 错误。我使用 PostgreSQL 作为数据库。

我究竟做错了什么?

原文由 Evan Bloemer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 560
2 个回答

解决这个问题的快速方法是从 Django shell ( python manage.py shell ) 填充你的数据库。您的代码没有 import djangodjango.setup() 应该可以正常工作。又快又脏 ;)

如果你需要不时添加数据,可以考虑写一个 管理命令。这将允许您调用 python manage.py my_command_name datafile.dat 。您可以在命令中实现任何逻辑(来自文件或 API 的数据,创建或更新)。

另一种添加数据的方法是使用数据迁移: https ://simpleisbetterthancomplex.com/tutorial/2017/09/26/how-to-create-django-data-migrations.html

另外,考虑使用 bulk_create 来提高效率(之前过滤数据列表以避免重复)

原文由 nad_rom 发布,翻译遵循 CC BY-SA 4.0 许可协议

我知道它一直像永远但是..虽然从技术上讲不是脚本,但 Django 允许通过创建 夹具 来进行数据库 播种

该文档非常直观。在 Django 中预填充数据库时,这始终是我的首选方法。例如,如果您有一个模型 Cars:

 class Cars(models.Model):
    make = models.CharField(max_length=50)
    color = models.CharField(max_length=50)

您可以创建播种固定装置 cars.json 如:

 [
  {
    "model":"myapp.cars",
    "pk":1,
    "fields":{
      "make": "Audi",
      "color":"Black"
    }
  },
  {
    "model":"myapp.cars",
    "pk":2,
    "fields":{
      "make": "Aston Martin",
      "color":"Blue"
    }
  }
]

要预填充数据库,只需运行 ./manage.py loaddata cars.json

我发现这是最好的选择,例如,如果您必须为您创建的每个 Web 应用程序在同一行中加载所有车型或所有国家/地区及其旗帜或其他数据…

原文由 karuoro 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进