Django之外的Django模型

Pra*_*oya 5 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)
Run Code Online (Sandbox Code Playgroud)

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

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

import django  
django.setup()
Run Code Online (Sandbox Code Playgroud)

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

我是否在这里缺少某些设置,还是在python中只有lib的轻量模型?

Rez*_*adi 1

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

选项 1(推荐)

看到评论,你提到:

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

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

为此,创建一个如下所示的管理命令即可:

  • 在您的应用程序中,创建一个文件夹management. 然后__init__.py向其中添加一个空文件。接下来创建另一个commands在该文件夹中调用的文件夹,然后__init__.pycommands文件夹中添加另一个空文件夹。现在在文件夹中创建脚本文件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.
    
    Run Code Online (Sandbox Code Playgroud)
  • 现在要运行它,只需执行以下命令:python manage.py test_command

  • 有关更多详细信息,请阅读此链接

选项2

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

选项3

正如我的朋友在评论中建议的那样,您可以配置另一个项目以使用现有的 django 项目作为应用程序。在 Django 之外使用 Django 数据库层