热门标签:
Q:

Django之外的Django模型

我有一个非django项目,我想使用django模型进行数据访问层。

requirements.txt
中添加了模型lib 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中只有lib有任何轻量级模型?

原网址
A:

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

选项1(推荐)

看到评论,你提到:

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

在某些情况下(就像你提到的那样),你可以使用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

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

选项2

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

选项3

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

相似问题