Python3 использует импортированный модуль в функции django - PullRequest
0 голосов
/ 29 января 2019

Я обновляю с Djanjo 1.8 до 2.1

Я заметил, что когда я пытаюсь использовать импортированный модуль, модуль не найден

Пример # 1

from var_dump import var_dump
from django.db import connection

def get_available_id():
    with connection.cursor() as cursor:
        query = """SELECT
        *
        FROM
        `stackoverflow`
        ;"""
        cursor.execute(query)
        row = cursor.fetchone()

    return row

var_dump(get_available_id())

Это приводит к NameError: name 'connection' is not defined

Полный дамп

root@fbb4988d3d17:/var/www/api.domain.com# python manage.py shell < sql/import.py 
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.5/dist-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.5/dist-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.5/dist-packages/django/core/management/base.py", line 316, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.5/dist-packages/django/core/management/base.py", line 353, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.5/dist-packages/django/core/management/commands/shell.py", line 92, in handle
    exec(sys.stdin.read())
  File "<string>", line 27, in <module>
  File "<string>", line 8, in get_available_id
NameError: name 'connection' is not defined

Как только я импортирую модуль connection в функцию get_answers все работает

Пример #2

from var_dump import var_dump

def get_available_id():
    from django.db import connection
    with connection.cursor() as cursor:
        query = """SELECT
        *
        FROM
        `stackoverflow`
        ;"""
        cursor.execute(query)
        row = cursor.fetchone()

    return row

var_dump(get_available_id())

Это работает.

Что можно сделать, чтобы пример № 1 работал с глобальным импортом.

Я выполняю код, подобный этому python manage.py shell < sql/import.py

1 Ответ

0 голосов
/ 31 января 2019

Проблема решается путем перемещения класса, который я пытаюсь запустить в отдельный файл.

#class_a.py
import re
class A:
    def word_to_list(str):
        words = re.split("(\s+)", str)
        return words

a = A()
a.word_to_list('bob is your uncle')

работает python manage.py shell < sql/class_a.py приводит к NameError: name 're' is not defined

Решение

#class_a.py
import re
class A:
    def word_to_list(str):
        words = re.split("(\s+)", str)
        return words

затем

#runner.py
from class_a import A
a = A()
a.word_to_list('bob is your uncle')

работает python manage.py shell < sql/runner.py

...