Django模型在Django之外

8

我有一个非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: 应用程序还没有加载。 为了解决上述错误,我运行了:
import django  
django.setup()

现在当我尝试时,会出现以下错误:
Bus doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS

我是否漏掉了某些设置,或者是否有一些轻量级的Python模型库?


2
你应该为Django创建整个应用程序结构。创建一个应用程序,在其中定义你的模型,然后从应用程序中导入。 - sytech
1
尝试使用Django数据库层在Django之外的环境中:https://dev59.com/1XI95IYBdhLWcg3wtwf4 - bvmcode
6
如果你只需要ORM,我强烈建议不要使用诸如Django这样的单体库。你将会遇到很多麻烦,因为你必须一直与Django的观点进行斗争。有更好的选择,例如sqlalchemy拥有卓越的ORM,而且更加“可插拔”。 - wim
1
@wim 我不同意,基本上我会在涉及关系型数据库设置的任何项目中使用Django。虽然我确实保持标准的项目结构。一旦你做了几次,它就不需要太多步骤了。而且,在开发过程中拥有可用于填充和查看数据的管理界面的好处是巨大的优势。SQL Alchemy可能是最明显的ORM替代方案,但其学习曲线比Django陡峭得多。 - wobbily_col
1
在我的特定情况下,只需一组从API下载数据并保存到数据库的脚本,SQLAlchemy就非常适合。 - Pratik Khadloya
显示剩余2条评论
1个回答

1

这是一个老问题,但我会回答它,也许能帮助其他人。

选项1(建议)

根据您的评论,您提到:

在我的特定情况下,只是一组从API下载数据并保存在数据库中的脚本,SQLAlchemy很适合。

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

为此,请创建以下管理命令,然后就可以了:

  • in your app, create a folder management. then add an empty __init__.py file to it. next create another folder called commands in that folder and yet add another empty __init__.py to commands folder. now create your script files in commands folder. for example test_script.py.

  • Now add this in test_script.py:

    from django.core.management.base import BaseCommand
    
    class Command(BaseCommand):
    
        def handle(self, *args, **kwargs):
            # Add your script codes here.
    
  • Now to run it, simply execute this command: python manage.py test_command

  • for more details read this link

选项 2

Python 有一个强大的 ORM 函数库,名为 sqlalchemy。如果你不想使用 Django 的任何部分或创建另一个 Django 并将非 Django 项目的代码添加到其中,可以使用它。但是请记住,您还需要使用 sqlalchemy 定义您的 Django 模型设计。但这并不难。

选项 3

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接