我需要从Django shell执行Python脚本.我试过了:
./manage.py shell << my_script.py
Run Code Online (Sandbox Code Playgroud)
但它没有用.它只是在等我写点什么.
我试图从另一个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
Run Code Online (Sandbox Code Playgroud)
根据Django的文档,我other_script.py看起来像这样:
import django
from django.conf import settings
settings.configure(DEBUG=True)
django.setup()
from store.store_app.models import MyModel
Run Code Online (Sandbox Code Playgroud)
但它会生成运行时错误:
RunTimeError: Model class store.store_app.models.MyModel doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
Run Code Online (Sandbox Code Playgroud)
我应该注意到我的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
Run Code Online (Sandbox Code Playgroud)
我明白了:
AttributeError: type object 'StoreAppConfig has …Run Code Online (Sandbox Code Playgroud) 注意settings/dev.py代替一个settings.py文件和以下Django(1.4.3)项目script.py中的my_appin:
.
??? my_project
? ??? my_app
? ? ??? __init__.py
? ? ??? models.py
? ? ??? tests.py
? ? ??? views.py
? ? ??? script.py
? ??? __init__.py
? ??? settings
? ? ??? dev.py
? ? ??? __init__.py
? ? ??? prod.py
? ??? urls.py
? ??? wsgi.py
??? manage.py
??? requirements.txt
Run Code Online (Sandbox Code Playgroud)
当我只有一个settings.py文件代替settings文件夹时,我能够运行以下脚本而没有任何错误:
script.py:
###################################################################
# set up for making it possible to …Run Code Online (Sandbox Code Playgroud) Traceback (most recent call last):
File "prototypes.py", line 39, in <module>
execute_from_command_line(sys.argv)
File "/home/leo/Desktop/learning_log/ll_env/lib/python3.5/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
utility.execute()
File "/home/leo/Desktop/learning_log/ll_env/lib/python3.5/site-packages/django/core/management/__init__.py", line 359, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/leo/Desktop/learning_log/ll_env/lib/python3.5/site-package/django/core/management/base.py", line 294, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/leo/Desktop/learning_log/ll_env/lib/python3.5/site-packages/django/core/management/base.py", line 345, in execute
output = self.handle(*args, **options)
File "/home/leo/Desktop/prototypes/sitebuilder/management/commands/build.py", line 42, in handle
call_command('compress',interactive=False,force=True)
File "/home/leo/Desktop/learning_log/ll_env/lib/python3.5/site-packages/django/core/management/__init__.py", line 113, in call_command
command = load_command_class(app_name, command_name)
File "/home/leo/Desktop/learning_log/ll_env/lib/python3.5/site-packages/django/core/management/__init__.py", line 40, in load_command_class
module = import_module('%s.management.commands.%s' % (app_name, name))
File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module
return …Run Code Online (Sandbox Code Playgroud)