%20%E3%81%A7%20VSCode%20%E3%81%A7%20postgreSQL%20SQL%20%E5%BC%8F%E3%82%92%E3%83%86%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
パッケージ マネージャー conda を使用して、venv 内の Python のインタラクティブ ノートブック (= Jupyter Notebook、iPython) で VSCode で 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 環境をアクティブ化する - Stack Overflow。
インタラクティブウィンドウを開くCtrl+Shift+P→「Jupyter: インタラクティブウィンドウの作成」
%load_ext sql
通常のPythonコードエディタで行を右クリックするだけで対話型ウィンドウが起動します。または、Shift+Enterその行に。
見るVisual Studio Code で Python インタラクティブ モードを検索/実行するにはどうすればよいですか? - Stack Overflow。
次に次のように表示されます:
'Python 3.10.6 ('venv310')' でセルを実行するには、ipykernel パッケージが必要です。
クリックインストール。
- よく分からないけどクリックしたと思うインストール、iPython の履歴にはまだ表示されています:
'Python 3.10.6 ('venv310')' でセルを実行するには、ipykernel パッケージが必要です。
次のコマンドを実行して、Python 環境に 'ipykernel' をインストールします。
コマンド: 'conda install -n venv310 ipykernel --update-deps --force-reinstall'# %% Python 3.10.8 (main, 2022 年 11 月 24 日、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。
%load_ext sql
ターミナルに入力するか、Python エディターからマジックを実行して、iPython ターミナルで実行します(対話型ウィンドウで実行する方法を確認するには、右クリックを確認してください)。
次のような表示が出た場合:
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
(そして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)
- これで、iPython コンソールで SQL 出力を確認できます。
%sql select * FROM x;
出力はその後に表示されます。表示制限については、ipython-sql ガイド-->「構成」。