如何在 VSCode 中使用套件管理器 conda 在 venv 中的 Python 互動筆記本(= Jupyter Notebook、iPython)中測試 postgreSQL SQL 表達式?

如何在 VSCode 中使用套件管理器 conda 在 venv 中的 Python 互動筆記本(= Jupyter Notebook、iPython)中測試 postgreSQL SQL 表達式?

如何在 VSCode 中使用套件管理器 conda 在 venv 中的 Python 互動筆記本(= Jupyter Notebook、iPython)中測試 postgreSQL SQL 表達式?

答案1

分享這個是因為我花了很長時間才從分散的指南和提示中設定它。


  • 變更為您選擇的 conda 環境。例如,建立一個名為的虛擬環境文v310(整個答案中的名稱相同)conda create -n venv310 python=3.10並使用以下命令啟動它:conda activate venv310

如果我從啟動了 venv310 的終端打開 VSCode,一旦我運行程式碼,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'
  • 如果沒有文v310在這裡工作時,從這個錯誤已經可以清楚地看出,錯誤獲取的基礎環境需要 sqlalchemy 模組,因此我們需要安裝在文v310:
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”。看在 VsCode 中啟動 Anaconda 環境
  • 重新啟動 VSCode。
  • 點選是的如果你看到這個:

在此輸入影像描述

我們注意到您正在使用 conda 環境。如果您在整合終端中遇到此環境問題,我們建議您讓 Python 擴充功能在使用者設定中將「terminal.integrated.inheritEnv」變更為 false。

來源:Python(擴展) 是 否 更多信息

  • Ctrl+Shift+P→“Python:選擇解釋器”→選擇文v310(這是我之前已經可以做的,但是現在,當運行一些程式碼時,它不會回退到基本環境)。看在VsCode中啟動Anaconda環境 - VoidCC

  • 開啟互動式視窗Ctrl+Shift+P→“Jupyter:創建互動視窗”

在此輸入影像描述

我只需右鍵單擊%load_ext sql普通 Python 程式碼編輯器中的行即可啟動互動式視窗。或者你按Shift+Enter在那條線上。

如何在 Visual Studio Code 中尋找/執行 Python 互動模式? - 堆疊溢位

然後顯示:

在此輸入影像描述

使用“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, Nov 24 2022, 14:13:03) [GCC 11.2.0]
輸入「copyright」、「credits」或「license」以取得更多資訊
IPython 8.7.0 -- 增強的互動式Python。類型 '?求助。

因此,如果您也看到了這一點,請conda install -n venv310 ipykernel --update-deps --force-reinstall運行文v310

  • 在 iPython 終端機中運行%load_ext sql,可以透過在終端機中鍵入它,也可以透過從 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.

那你需要運行文v310:

conda install -c conda-forge ipython-sql

(而不是 pip 安裝程序,pipenv install ipython-sql就像它寫在ipython-sql 指南

使用錯誤:未找到線路魔術功能%sql- Thinbug

  • 回到 VSCode,您可能會看到:

在此輸入影像描述

但這並沒有壞處。

  • 再次運行:
%load_ext sql

在此輸入影像描述

  • 然後: %sql postgresql+psycopg2://localhost/&server=postgres?user=postgres&port=5432&password=postgres&database=test_db

在此輸入影像描述

(看:PostgreSQL 連接字串/URL 的格式是什麼? - 堆疊溢位

  • 現在,您可以在 iPython 控制台中看到 SQL 輸出:
%sql select * FROM x;

在此輸入影像描述

之後的輸出。有關顯示限制,請參閱ipython-sql 指南-->“配置”。

相關內容