Django独立脚本

时间:2016-09-27 11:19:54

标签: python django

我正在尝试从另一个python脚本访问我的Django(v1.10)应用程序数据库,并且遇到了一些麻烦。

这是我的文件和文件夹结构:

store
 store
   __init.py__
   settings.py
   urls.py
   wsgi.py
 store_app
   __init.py__
   admin.py
   apps.py
   models.py
   ...
 db.sqlite3
 manage.py

other_script.py

根据Django's documentations我的other_script.py看起来像这样:

import django
from django.conf import settings

settings.configure(DEBUG=True)
django.setup()

from store.store_app.models import MyModel

但它会产生运行时错误:

RunTimeError: Model class store.store_app.models.MyModel doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

我应该注意,我的INSTALLED_APPS列表包含store_app作为其最后一个元素。

如果我尝试传递这样的配置:

import django
from django.conf import settings
from store.store_app.apps import StoreAppConfig

settings.configure(StoreAppConfig, DEBUG=True)
django.setup()

from store.store_app.models import MyModel

我明白了:

AttributeError: type object 'StoreAppConfig has no attribute  'LOGGING_CONFIG'.

如果我修改settings.py并添加LOGGING_CONFIG=None,我会收到另一个有关其他遗失属性的错误,依此类推。

任何建议将不胜感激。

5 个答案:

答案 0 :(得分:32)

试试这个

<!DOCTYPE html>
<html>

<head>

  <meta charset=utf-8 />
  <title>JS Bin</title>
</head>

<body>

  Text:
  <input id="input" type="text" value="John Doe">

</body>

</html>

您可以在系统中的任何位置使用此脚本。

答案 1 :(得分:9)

这听起来像Django Management commands.的一个很好的用例,它有额外的好处,你可以从cron运行它,直接从命令行运行,或从django内部调用。这使脚本可以完全访问与主项目相同的设置和环境变量。

如果将其移动到适当的目录中 - 使用此处的商店作为示例,而不是建议,它应该有效。

store 
    management 
    __init__.py
        commands
        __init__.py 
        otherscript.py 

答案 2 :(得分:1)

我发现django-extensions软件包最有用。您可以找到它here

安装并将其添加到已安装的应用程序之后,您要做的就是创建一个名为scripts的目录,创建一个文件并由python manage.py runscript file_name运行它

请记住,文件必须具有入口点。该入口点是一种称为run的方法,必须在终端中运行python manage.py runscript file_name时才能运行

答案 3 :(得分:0)

尝试从store_app.models导入 - 因为周围的store文件夹不是python模块,导入时不应使用。

import django
from django.conf import settings

settings.configure(DEBUG=True)
django.setup()

from store_app.models import MyModel

更新:我刚刚注意到你把那个脚本放在你的项目文件夹旁边 - 你应该把它移到里面才能工作。

答案 4 :(得分:0)

Django 独立脚本。

  • 将其放在与 manage.py 文件相同的目录中
  • 将 PROJECT_NAME 重命名为您的项目名称
import os

PROJECT_NAME = 'ENTER YOUR PROJECT NAME HERE'

def main():
    # import statemts
    # from app.models import Author,Category,Book
    
    # code logic - anything you want
    

if __name__ == '__main__':
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', '%s.settings' % PROJECT_NAME)
    import django
    django.setup()
    main()