似乎他们在Python 3中取消了通过删除快速加载脚本的所有简单方法 execfile()
有没有一个明显的选择我错过了?
我想用Django更新一个表 - 在原始SQL中是这样的:
update tbl_name set name = 'foo' where name = 'bar'
Run Code Online (Sandbox Code Playgroud)
我的第一个结果是这样的 - 但这很讨厌,不是吗?
list = ModelClass.objects.filter(name = 'bar')
for obj in list:
obj.name = 'foo'
obj.save()
Run Code Online (Sandbox Code Playgroud)
有更优雅的方式吗?
我正在编写一个脚本,将一些模型对象导入我的django应用程序使用的数据库中.在过去,我通过运行./manage.py shell然后解决了这个问题import myscript.我相信有更好的方法.我希望能够从我的HD上的任何地方调用脚本python scriptname.py,并且在该脚本的前几行中它将执行任何必要的导入/其他操作,以便它可以访问模型对象并且表现得好像它已经运行使用manage.py shell.
我需要添加到脚本中才能实现此目的?
编辑:
基于@Melug的回答,添加了动态设置的Python路径来解决问题中的"我的HD上的任何地方"部分:
import sys
sys.path.append('c:\\my_projec_src_folder')
from myproject import settings
from django.core.management import setup_environ
setup_environ(settings)
Run Code Online (Sandbox Code Playgroud) 我有一个脚本,它使用Django ORM功能,以及其他外部库,我想在Django之外运行(即,从命令行执行).
编辑:目前,我可以通过导航到URL来启动它...
如何为此设置环境?
我可以移动到python项目目录(比如c:\ www\myproject),然后发出
python manage.py shell
Run Code Online (Sandbox Code Playgroud)
然后我可以使用django项目中的所有模块,从shell命令中说出以下命令:
import settings
from django.template import Template, Context
t=Template("My name is {myname}.")
c=Context({"myname":"John"})
f = open('write_test.txt', 'w')
f.write(t.render(c))
f.close
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试将所有命令收集到python脚本中时,说"mytest.py",我无法执行脚本.我必须错过重要的事情.
我发出了python mytest.py
然后我得到Import error: could not import settings它是在sys路径上吗?"
我在settings.py所在的项目目录中......
有人可以帮帮我吗?
谢谢.
有没有办法自动为django模型创建数据?所以我创建了一个包含选项,文本字段,外键和所有内容的模型.是否有自动方式填充数据?我真的不在乎它们是否是垃圾值,只是它在架构中是有效的.
如果有一种方法可以指定某些模型并生成其他模型,那将会非常酷.我知道'类别',不介意手动输入那些.如果有数据已经存在,它可以生成有效的"条目"并使用现有数据作为外键,这将是很好的.
我正在尝试创建一个用测试用户填充数据库的脚本.我是Django和Python的新手.我继续得到:
Runtime error: App registry isn't ready yet.
Run Code Online (Sandbox Code Playgroud)
这是输出和错误:
starting population script
Traceback (most recent call last):
File "populate.py", line 32, in <module>
populate()
File "populate.py", line 22, in populate
i.save()
File "c:\Python27\lib\site-packages\django-1.7a2-py2.7.egg\django\db\models\base.py", line 603, in save
force_update=force_update, update_fields=update_fields)
...
...
...
File "c:\Python27\lib\site-packages\django-1.7a2-py2.7.egg\django\apps\registry.py", line 156, in get_models
self.check_ready()
File "c:\Python27\lib\site-packages\django-1.7a2-py2.7.egg\django\apps\registry.py", line 119, in check_ready
raise RuntimeError("App registry isn't ready yet.")
RuntimeError: App registry isn't ready yet.
Run Code Online (Sandbox Code Playgroud)
这是代码:
import os
import datetime
def populate():
freer = User.objects.create_user( 'joyyie', 'lolcats@gmail.com', 'e') …Run Code Online (Sandbox Code Playgroud) 无论我尝试什么,自从我切换到 Python 3 后,我只能从项目的根文件夹运行导入的脚本,而不能从子文件夹导入。我知道这里有很多关于我收到的错误消息的问题,但建议的解决方案对我不起作用。有人可以为这个小示例项目提供示例解决方案吗?我相信它会受到很多人的赞赏。
proj\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foofolder\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foofile.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 subfolder\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 run.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py\nRun Code Online (Sandbox Code Playgroud)\n\nfoofun()我在 中定义了该函数foofile.py,并想在 中调用它run.py。
如果run.py直接在proj里面就可以了。但是(只是为了让事情井井有条)我想将其放在子文件夹中 - 令人惊讶的是,这似乎是不可能的。
烦人的是,我的 IDE (PyCharm) 中的自动完成功能表明from foofolder.foofile import foofun应该可以工作。但事实并非如此。我也无法想象任何其他进口:
from foofolder.foofile import foofun-->ImportError: No module named 'foofolder'
from .foofolder.foofile import foofun--> SystemError: Parent module '' not loaded, cannot perform relative import(与开头的两个点相同。)
from proj.foofolder.foofile import foofun--> …
我已将以下代码放在脚本文件的顶部
os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'momsite.conf.local.settings')
django.setup()
Run Code Online (Sandbox Code Playgroud)
现在我可以导入我的 django 应用程序并运行小片段(主要用于测试内容)
我想导入通过注册的所有模型settings.INSTALLED_APPS
我知道https://github.com/django-extensions/django-extensions在运行时会manage.py shell_plus自动导入所有模型等。
我正在看他们的代码。不确定我是否能理解它。
目前,我正在执行以下操作,我认为它正在导入模型,但不知何故在脚本中不可用
from django_extensions.management.shells import import_objects
from django.core.management.base import BaseCommand, CommandError
options = {}
style = BaseCommand().style
import_objects(options, style)
Run Code Online (Sandbox Code Playgroud)
import_objects内部调用from importlib import import_module显然,我们需要用导入的类填充 globals()
options = {'quiet_load': True}
style = BaseCommand().style
imported_objects = import_objects(options, style)
globals().update(imported_objects)
Run Code Online (Sandbox Code Playgroud)