Django模型在django之外

时间:2018-02-27 18:54:20

标签: python django django-models

我有一个非django项目,我想将django模型用于数据访问层。

requirements.txt中添加了模型库 django-model-utils==3.1.1

代码设置如下:

from django.conf import settings
from django.db import models

settings.configure(
  DATABASE_ENGINE='django.db.backends.mysql',
  DATABASE_NAME='***',
  DATABASE_USER='***',
  DATABASE_PASSWORD='***',
  DATABASE_HOST='***',
  DATABASE_PORT='***')

class Bus(models.Model):
  class Meta:
    db_table = 'my_custom_bus'

  bus_name = models.CharField(max_length=20)
  bus_description = models.CharField(max_length=100)

但是当我运行上面的代码时,我收到以下错误: django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

为了解决上述错误,我跑了:

import django  
django.setup()

现在,当我尝试时,我得到:
Bus doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS

我在这里错过了一些设置,或者在python中是否只有轻量级模型?

1 个答案:

答案 0 :(得分:0)

(这是一个老问题,但我回答了,也许可以帮助其他人。)

选项1(推荐)

看到评论,您提到:

  

在我的特殊情况下,sqlalchemy非常适合一组脚本,这些脚本从api下载数据并保存在数据库中。

在某些情况下(如您提到的那样),您可以使用django管理命令。例如,如果您想执行一些与Django模型相关的任务,并且应在后台运行。例如某些crontab作业,例如每5分钟更新数据库字段或执行一些与应该运行和更新数据库模型的API相关的脚本。

为此,请创建如下所示的管理命令,然后您便可以完成工作:

  • 在您的应用中,创建一个文件夹management。然后向其中添加一个空的__init__.py文件。接下来,在该文件夹中创建另一个名为commands的文件夹,然后向__init__.py文件夹添加另一个空的commands。现在,在commands文件夹中创建脚本文件。例如test_script.py

  • 现在将其添加到test_script.py中:

    from django.core.management.base import BaseCommand
    
    class Command(BaseCommand):
    
        def handle(self, *args, **kwargs):
            # Add your script codes here.
    
  • 现在要运行它,只需执行以下命令:python manage.py test_command

  • 有关更多详细信息,请阅读this link

选项2

对于Python sqlalchemy,有一个功能强大的ORM。如果您不想使用django的任何部分或不想创建另一个django并将非django项目的代码添加到其中,则可以使用它。但是请记住,您也需要使用sqlalchemy定义django模型设计。但这并不难。

选项3

正如我的朋友在评论中建议的那样,您可以配置另一个项目以将现有的django项目用作应用程序。跟随Using Django database layer outside of Django?