1

有没有办法配置 Pycharm Django 控制台从 django_extensions 运行 shell_plus?特别是,我想为每个 ORM 操作打印 SQL。我已经尝试过这个脚本,传递了 print_sql 选项,但它不起作用。先感谢您。

import sys
import django
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
if 'setup' in dir(django): django.setup()
import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)
from django_extensions.management import shells
from django.core.management.color import color_style
style = color_style(force_color=True)
# Default settings for shell_plus
shell_plus_default_settings = {
    'ipython':         True,
    'print_sql':       True,
}
g = globals()
objects_to_import = shells.import_objects(shell_plus_default_settings, style)
g.update(objects_to_import)
print(style.NOTICE("Python %s on %s" % (sys.version, sys.platform)))
print(style.NOTICE("Django %s" % django.get_version()))
print(style.SUCCESS("Shell Prepared. Enjoy!"))
4

2 回答 2

1

这是一个对我有用的。重要的一件事是事情发生的顺序——之前做 shell_plus 的东西django_manage_shell.run(...)

import sys; print('Python %s on %s' % (sys.version, sys.platform))
import django; print('Django %s' % django.get_version())
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
if 'setup' in dir(django): django.setup()
from django_extensions.management.shells import import_objects
from django.core.management.color import no_style

globals().update(import_objects({"dont_load": [], "quiet_load": False}, no_style()))
import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)
于 2020-10-26T22:18:10.000 回答
0

您可以使用执行的猴子补丁在 PyCharm Django 控制台中启用 SQL 打印功能django_extensions.management.debug_cursor.monkey_patch_cursordebugwrapper- 只需激活启动脚本(或当前打开的控制台)中的上下文管理器,就像这样

monkey_patch_cursordebugwrapper(print_sql=True).__enter__()

这是我的整个控制台启动脚本: https ://gist.github.com/gruuya/e837b3037781c715185d409499fabd7d

但是请注意,由于 PyCharm 调试器需要在“变量”窗格中显示变量,Django 查询不再是惰性的,而是在将它们分配给变量时立即进行评估(您可以通过创建 lambdas 来规避这一点执行所需的查询)。

于 2021-02-03T11:08:07.827 回答