Как протестировать в VSCode выражение SQL postgreSQL в интерактивном блокноте Python (= Jupyter Notebook, iPython) в venv с менеджером пакетов conda?

Как протестировать в VSCode выражение SQL postgreSQL в интерактивном блокноте Python (= Jupyter Notebook, iPython) в venv с менеджером пакетов conda?

Как протестировать в VSCode выражение SQL postgreSQL в интерактивном блокноте Python (= Jupyter Notebook, iPython) в venv с менеджером пакетов conda?

решение1

Делюсь этим, так как мне потребовалось слишком много времени, чтобы настроить все это с помощью разрозненных руководств и подсказок.


  • Измените на среду conda по вашему выбору. Например, создайте виртуальную среду под названиемvenv310(то же имя во всем ответе) conda create -n venv310 python=3.10и активируйте его с помощью: conda activate venv310.

Если я открываю VSCode из терминала, который активировал venv310, VSCode возвращается к базовому окружению, как только я запускаю код с помощьюShift+Enter:

(base) … $ /bin/python3
Python 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from sqlalchemy import create_engine

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'sqlalchemy'
  • Не имеяvenv310в работе здесь, уже из этой ошибки ясно, что ошибочно взятая базовая среда будет нуждаться в модуле sqlalchemy, так что нам нужно установить вvenv310:
conda install sqlalchemy
  • А из более поздней ошибки выясняется, что нужно еще установить диалект "psycopg2":
    raise exc.NoSuchModuleError(
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgres.psycopg2
conda install psycopg2
  • Если вместо этого вы запустите магию вроде '%load_ext sql', вы увидите:
>>> %load_ext sql
  File "<stdin>", line 1
    %load_ext sql
    ^
SyntaxError: invalid syntax
  • В любом случае, главная проблема в том, что виртуальная среда не работает. Поэтому установите расширение VSCode/VSCodium "Python for VSCode". СмотретьАктивация среды Anaconda в VsCode.
  • Перезапустите VSCode.
  • НажмитеДаесли вы видите это:

введите описание изображения здесь

Мы заметили, что вы используете среду conda. Если у вас возникли проблемы с этой средой в интегрированном терминале, мы рекомендуем вам разрешить расширению Python изменить "terminal.integrated.inheritEnv" на false в ваших пользовательских настройках.

Источник: Python (расширение) Да Нет Дополнительная информация

  • НажиматьCtrl+Shift+P→ «Python: Выбор интерпретатора» → выбратьvenv310(это то, что я уже мог делать раньше, но теперь при запуске некоторого кода он не возвращался к базовому окружению). СмотритеАктивация среды Anaconda в VsCode - Stack Overflow.

  • Откройте интерактивное окно с помощьюCtrl+Shift+P→ «Jupyter: Создание интерактивного окна»

введите описание изображения здесь

Я запустил интерактивное окно, просто щелкнув правой кнопкой мыши по %load_ext sqlстроке, которая была в обычном редакторе кода Python. Или вы нажимаетеShift+Enterв этой строке.

ВидетьКак найти/выполнить интерактивный режим Python в Visual Studio Code? - Stack Overflow.

Затем он показывает:

введите описание изображения здесь

Для запуска ячеек с Python 3.10.6 (venv310) требуется пакет ipykernel.

НажмитеУстановить.

  • Не уверен, но, кажется, я нажалУстановить, и это все еще отображается в истории iPython:

введите описание изображения здесь

Для работы ячеек с 'Python 3.10.6 ('venv310')' требуется пакет ipykernel.
Выполните следующую команду, чтобы установить 'ipykernel' в среду Python.
Команда: 'conda install -n venv310 ipykernel --update-deps --force-reinstall'

# %% Python 3.10.8 (main, 24 ноября 2022 г., 14:13:03) [GCC 11.2.0]
Введите «авторское право», «кредиты» или «лицензия» для получения дополнительной информации
IPython 8.7.0 — улучшенный интерактивный Python. Введите «?» для получения справки.

Таким образом, если вы тоже это видите, бегите conda install -n venv310 ipykernel --update-deps --force-reinstallвvenv310.

  • Запустите %load_ext sqlв терминале iPython, либо введя его в терминале, либо запустив магию из редактора Python (щелкните правой кнопкой мыши, чтобы увидеть, как запустить в интерактивном окне).

введите описание изображения здесь

введите описание изображения здесь

Если ты видишь:

введите описание изображения здесь

Output exceeds the size limit. Open the full output data in a text editor
---------------------------------------------------------------------------
ModuleNotFoundError                     Traceback (most recent call last)
Cell In[2], line 1
----> 1 get_ipython().run_line_magic('load_ext', 'sql')

File ~/anaconda3/envs/venv310/lib/python3.10/site-packages/IPython/core/interactiveshell.py:2364, in InteractiveShell.run_line_magic(self, magic_name, line, _stack_depth)
   2362     kwargs['local_ns'] = self.get_local_scope(stack_depth)
   2363 with self.builtin_trap:
-> 2364     result = fn(*args, **kwargs)
   2365 return result

File ~/anaconda3/envs/venv310/lib/python3.10/site-packages/IPython/core/magics/extension.py:33, in ExtensionMagics.load_ext(self, module_str)
    31 if not module_str:
    32  raise UsageError('Missing module name.')
---> 33 res = self.shell.extension_manager.load_extension(module_str)
    35 if res == 'already loaded':
    36  print("The %s extension is already loaded. To reload it, use:" % module_str)

File ~/anaconda3/envs/venv310/lib/python3.10/site-packages/IPython/core/extensions.py:76, in ExtensionManager.load_extension(self, module_str)
    69 """Load an IPython extension by its module name.
    70
    71 Returns the string "already loaded" if the extension is already loaded,
    72 "no load function" if the module doesn't have a load_ipython_extension
    73 function, or None if it succeeded.
    74 """
...
File <frozen importlib._bootstrap>:1027, in _find_and_load(name, import_)

File <frozen importlib._bootstrap>:1004, in _find_and_load_unlocked(name, import_)

ModuleNotFoundError: No module named 'sql'

или если вы выполните следующую магию и увидите что-то из этого:

# %%
%sql postgresql+psycopg2://localhost/&server=postgres?user=postgres&port=5432&password=postgres&database=test_db
UsageError: Line magic function `%sql` not found.

# %%
%%sql select * FROM x;
UsageError: Cell magic `%%sql` not found.

# %%
result = %sql select * FROM x;
UsageError: Line magic function `%sql` not found.

то вам нужно бежать вvenv310:

conda install -c conda-forge ipython-sql

(а не установщик pip, pipenv install ipython-sqlкак написано вруководство по ipython-sql)

ВидетьUsageError: Магическая функция линии %sqlне найдена - Stack Overflow

  • Вернувшись в VSCode, вы можете увидеть:

введите описание изображения здесь

Но это не вредит.

  • Запустите еще раз:
%load_ext sql

введите описание изображения здесь

  • И затем: %sql postgresql+psycopg2://localhost/&server=postgres?user=postgres&port=5432&password=postgres&database=test_db

введите описание изображения здесь

(Видеть:Каков формат строки подключения PostgreSQL / URL? - Stack Overflow)

  • И теперь вы можете увидеть вывод SQL в консоли iPython:
%sql select * FROM x;

введите описание изображения здесь

с последующим выводом. Для displaylimit см.руководство по ipython-sql--> «Конфигурация».

Связанный контент