Django:如何使用我的模型类从 Django 外部与我的数据库进行交互?

Posted

技术标签:

【中文标题】Django:如何使用我的模型类从 Django 外部与我的数据库进行交互?【英文标题】:Django: How can I use my model classes to interact with my database from outside Django? 【发布时间】:2010-09-27 20:08:00 【问题描述】:

我想编写一个使用 Django 应用模型与我的数据库交互的脚本。但是,我希望能够从命令行或通过 cron 运行此脚本。我需要导入什么才能允许这样做?

【问题讨论】:

重复:***.com/questions/302651/… 和另一个:***.com/questions/182229/… 【参考方案1】:

您需要设置 Django 环境变量。这些告诉 Python 你的项目在哪里,设置模块的名称是什么(设置模块中的项目名称是可选的):

import os

os.environ['PYTHONPATH'] = '/path/to/myproject'
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'

现在您应该可以访问模型了:

from myproject.models import MyModel

all_my_models = MyModel.objects.all()

【讨论】:

我们在 shell 中使用普通的旧环境变量来做到这一点。 这不起作用。 Python 在启动时读取 PYTHONPATH。 docs.python.org/using/cmdline.html#envvar-PYTHONPATH 澄清一下,您不想尝试设置 PYTHONPATH,而是想使用类似 sys.path.append("/usr/local/django/") 之类的东西来使用您的项目路径。【参考方案2】:

首选方法应该是添加custom command,然后像任何其他django-admin 一样运行它(不要与django.contrib.admin 混淆)命令:

./manage.py mycustomcommand --customarg

设置 DJANGO_SETTINGS_MODULE 仅应在自定义命令不可行时使用。

【讨论】:

+1 - 这是最好的方法,因为您的命令可以很好地与应用程序的其余部分集成并使用 manage.py 轻松运行。此处的文档:docs.djangoproject.com/en/dev/howto/custom-management-commands +1 不幸的是,官方文档对实现细节有点轻描淡写,建议您阅读源代码。这不是一件坏事,但如果您想快速修复,请查看b-list.org/weblog/2008/nov/14/management-commands,它有一个工作示例。 哦,另一个 Django 开发人员也有一篇博客解释了这个过程,这里:oebfare.com/blog/2008/nov/03/writing-custom-management-command【参考方案3】:

根据您的具体需求,django-command-extensions 可能会为您节省一些时间。要按原样运行任何脚本而不弄乱环境变量,只需键入:

./manage.py runscript path/to/my/script.py

django-command-extensions 还具有用于将脚本作为 cron 作业自动化的命令,这是您提到的您想做的事情。

如果您是一个更具体的人,您可以查看very detailed post 概述如何制作“独立”django 脚本以从 cron 作业运行等等。

【讨论】:

以上是关于Django:如何使用我的模型类从 Django 外部与我的数据库进行交互?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Django 模型在网页上获取动态数据?

如何在 django 中使用模型进行查询

如何在我的 Django 模型中列出项目?

如何使用 django 模板以特定顺序呈现 django 模型实例?

我的 django 模型 DateField 如何将 30 天添加到提供的值?

如何从 Django 加载模型管理文件中的静态文件?