【问题标题】:Run manage.py shell_plus --print-sql in Pycharm Django Console在 Pycharm Django 控制台中运行 manage.py shell_plus --print-sql
【发布时间】:2020-01-18 10:30:18
【问题描述】:

有没有办法配置 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!"))

【问题讨论】:

  • 这能回答你的问题吗? Run shell_plus through PyCharm?
  • 不,这就是我提出另一个问题的原因
  • 您是否尝试过通过 settings.py 配置选项启用它? SHELL_PLUS_PRINT_SQL = True
  • 当然不行。

标签: python django pycharm django-extensions


【解决方案1】:

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

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)

【讨论】:

    【解决方案2】:

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

    monkey_patch_cursordebugwrapper(print_sql=True).__enter__()

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

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

    【讨论】:

      猜你喜欢
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      • 2014-04-24
      相关资源
      最近更新 更多