我有一个非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中是否只有轻量级模型?
答案 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?