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的轻量模型?
(这是一个老问题,但我回答它,也许可以帮助其他人。)
选项 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.
Run Code Online (Sandbox Code Playgroud)现在要运行它,只需执行以下命令:python manage.py test_command
有关更多详细信息,请阅读此链接
选项2
python 有一个强大的 ORM sqlalchemy。如果您不想使用 django 的任何部分或创建另一个 django 并将非 django 项目的代码添加到其中,则可以使用它。但请记住,您还需要使用 sqlalchemy 定义 django 模型设计。但做到这一点并不难。
选项3
正如我的朋友在评论中建议的那样,您可以配置另一个项目以使用现有的 django 项目作为应用程序。在 Django 之外使用 Django 数据库层?