Wie testet man in VSCode einen PostgreSQL-SQL-Ausdruck im interaktiven Notebook von Python (= Jupyter Notebook, iPython) in einem Venv mit dem Paketmanager conda?

Wie testet man in VSCode einen PostgreSQL-SQL-Ausdruck im interaktiven Notebook von Python (= Jupyter Notebook, iPython) in einem Venv mit dem Paketmanager conda?

Wie testet man in VSCode einen PostgreSQL-SQL-Ausdruck im interaktiven Notebook von Python (= Jupyter Notebook, iPython) in einem Venv mit dem Paketmanager conda?

Antwort1

Ich teile dies, da es zu lange gedauert hat, es anhand der verstreuten Anleitungen und Hinweise einzurichten.


  • Wechseln Sie zu einer Conda-Umgebung Ihrer Wahl. Erstellen Sie beispielsweise eine virtuelle Umgebung namensvenv310(gleicher Name in der gesamten Antwort) mit conda create -n venv310 python=3.10und aktiviere es mit: conda activate venv310.

Wenn ich VSCode von einem Terminal aus öffne, das venv310 aktiviert hat, fällt VSCode auf die Basisumgebung zurück, sobald ich Code mitUmschalt+Eingabe:

(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'
  • Ohne dievenv310bei der Arbeit hier, es ist bereits aus diesem Fehler klar, dass die fälschlicherweise genommene Basisumgebung das sqlalchemy-Modul benötigen würde, so dass wir in der installieren müssenvenv310:
conda install sqlalchemy
  • Und aus einem späteren Fehler geht hervor, dass Sie auch den Dialekt "psycopg2" installieren müssen:
    raise exc.NoSuchModuleError(
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgres.psycopg2
conda install psycopg2
  • Wenn Sie stattdessen magische Aktionen wie „%load_ext sql“ ausführen, wird Folgendes angezeigt:
>>> %load_ext sql
  File "<stdin>", line 1
    %load_ext sql
    ^
SyntaxError: invalid syntax
  • Das Hauptproblem ist jedoch, dass die virtuelle Umgebung nicht funktioniert. Installieren Sie daher die VSCode/VSCodium-Erweiterung „Python for VSCode“. SieheAktivieren der Anaconda-Umgebung in VsCode.
  • Starten Sie VSCode neu.
  • KlickenJawenn Sie dies sehen:

Bildbeschreibung hier eingeben

Wir haben festgestellt, dass Sie eine Conda-Umgebung verwenden. Wenn Sie im integrierten Terminal Probleme mit dieser Umgebung haben, empfehlen wir Ihnen, die Python-Erweiterung „terminal.integrated.inheritEnv“ in Ihren Benutzereinstellungen auf „false“ ändern zu lassen.

Quelle: Python (Erweiterung) Ja Nein Weitere Informationen

  • Drücken SieStrg+Umschalt+P→ „Python: Interpreter auswählen“ → wählenvenv310(das konnte ich schon vorher, aber jetzt, wenn ich Code ausführe, wird nicht auf die Basisumgebung zurückgegriffen). SieheAnaconda-Umgebung in VsCode aktivieren - Stack Overflow.

  • Öffnen Sie das interaktive Fenster mitStrg+Umschalt+P→ „Jupyter: Interaktives Fenster erstellen“

Bildbeschreibung hier eingeben

Ich habe das interaktive Fenster einfach mit einem Rechtsklick auf die %load_ext sqlZeile gestartet, die ich im normalen Python-Code-Editor hatte. Oder Sie drückenUmschalt+Eingabein dieser Zeile.

SehenWie finde/führe ich den interaktiven Python-Modus in Visual Studio Code aus? – Stack Overflow.

Dann wird angezeigt:

Bildbeschreibung hier eingeben

Zum Ausführen von Zellen mit „Python 3.10.6 (‚venv310‘)“ ist das ipykernel-Paket erforderlich.

KlickenInstallieren.

  • Ich bin nicht sicher, aber ich glaube, ich habe geklicktInstallieren, und es wurde immer noch im iPython-Verlauf angezeigt:

Bildbeschreibung hier eingeben

Zum Ausführen von Zellen mit „Python 3.10.6 (‚venv310‘)“ ist das ipykernel-Paket erforderlich.
Führen Sie den folgenden Befehl aus, um „ipykernel“ in der Python-Umgebung zu installieren.
Befehl: „conda install -n venv310 ipykernel --update-deps --force-reinstall“

# %% Python 3.10.8 (main, 24. Nov. 2022, 14:13:03) [GCC 11.2.0]
Geben Sie „Copyright“, „Credits“ oder „Lizenz“ ein, um weitere Informationen zu erhalten.
IPython 8.7.0 – Ein verbessertes interaktives Python. Geben Sie „?“ ein, um Hilfe zu erhalten.

Wenn Sie dies also auch sehen, führen Sie conda install -n venv310 ipykernel --update-deps --force-reinstallimvenv310.

  • Führen Sie es %load_ext sqlim iPython-Terminal aus, entweder durch Eingabe in das Terminal oder indem Sie die Magie vom Python-Editor aus ausführen (klicken Sie mit der rechten Maustaste, um zu sehen, wie Sie es im interaktiven Fenster ausführen).

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Wenn du siehst:

Bildbeschreibung hier eingeben

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'

oder wenn Sie den folgenden Zauber ausführen und eines davon sehen:

# %%
%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.

dann müssen Sie in dervenv310:

conda install -c conda-forge ipython-sql

(und nicht der Pip-Installer, pipenv install ipython-sqlwie es in deripython-sql-Handbuch)

SehenUsageError: Line Magic-Funktion %sqlnicht gefunden

  • Zurück in VSCode sehen Sie möglicherweise:

Bildbeschreibung hier eingeben

Aber das schadet nicht.

  • Führe es nochmals aus:
%load_ext sql

Bildbeschreibung hier eingeben

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

Bildbeschreibung hier eingeben

(Sehen:Welches Format hat die PostgreSQL-Verbindungszeichenfolge/URL? – Stack Overflow)

  • Und jetzt können Sie die SQL-Ausgabe in der iPython-Konsole sehen:
%sql select * FROM x;

Bildbeschreibung hier eingeben

mit der Ausgabe danach. Eine Anzeigebegrenzung finden Sie imipython-sql-Handbuch--> „Konfiguration“.

verwandte Informationen