¿Cómo probar en VSCode una expresión SQL postgreSQL en el cuaderno interactivo de Python (= Jupyter Notebook, iPython) en un venv con el administrador de paquetes conda?

¿Cómo probar en VSCode una expresión SQL postgreSQL en el cuaderno interactivo de Python (= Jupyter Notebook, iPython) en un venv con el administrador de paquetes conda?

¿Cómo probar en VSCode una expresión SQL postgreSQL en el cuaderno interactivo de Python (= Jupyter Notebook, iPython) en un venv con el administrador de paquetes conda?

Respuesta1

Comparto esto ya que me tomó demasiado tiempo configurarlo a partir de las guías y sugerencias dispersas.


  • Cambie a un entorno conda de su elección. Por ejemplo, cree un entorno virtual llamadovenv310(mismo nombre en toda la respuesta) con conda create -n venv310 python=3.10y actívalo con: conda activate venv310.

Si abro VSCode desde una terminal que ha activado venv310, VSCode vuelve al entorno base tan pronto como ejecuto el código conMayús+Entrar:

(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'
  • Sin tener elvenv310En el trabajo aquí, ya está claro a partir de este error que el entorno base tomado por error necesitaría el módulo sqlalchemy, por lo que necesitamos instalarlo en elvenv310:
conda install sqlalchemy
  • Y de un error posterior resulta que también necesitas instalar el dialecto "psycopg2":
    raise exc.NoSuchModuleError(
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgres.psycopg2
conda install psycopg2
  • Si ejecuta magia como '%load_ext sql', verá:
>>> %load_ext sql
  File "<stdin>", line 1
    %load_ext sql
    ^
SyntaxError: invalid syntax
  • De todos modos, el principal problema es que el entorno virtual no funciona. Por lo tanto, instale la extensión VSCode/VSCodium "Python para VSCode". VerActivando el entorno Anaconda en VsCode.
  • Reinicie VSCode.
  • Hacer clicsi ves esto:

ingrese la descripción de la imagen aquí

Notamos que estás usando un entorno conda. Si tiene problemas con este entorno en la terminal integrada, le recomendamos que permita que la extensión de Python cambie "terminal.integrated.inheritEnv" a falso en su configuración de usuario.

Fuente: Python (Extensión) Sí No Más información

  • PrensaCtrl+Mayús+P→ "Python: Seleccionar intérprete" → elegirvenv310(Esto es lo que ya podía hacer antes, pero ahora, al ejecutar algún código, no volvía al entorno base). VerActivando el entorno Anaconda en VsCode.

  • Abra la ventana interactiva conCtrl+Mayús+P→ "Jupyter: crear ventana interactiva"

ingrese la descripción de la imagen aquí

Inicié la ventana interactiva simplemente con un clic derecho en la %load_ext sqllínea que tenía en el editor de código Python normal. O presionasMayús+Entraren esa línea.

Ver¿Cómo encuentro/ejecuto el modo interactivo de Python en Visual Studio Code? - Desbordamiento de pila.

Luego muestra:

ingrese la descripción de la imagen aquí

La ejecución de celdas con 'Python 3.10.6 ('venv310')' requiere el paquete ipykernel.

Hacer clicInstalar.

  • No estoy seguro, pero creo que hice clic.Instalar, y todavía se muestra en el historial de iPython:

ingrese la descripción de la imagen aquí

La ejecución de celdas con 'Python 3.10.6 ('venv310')' requiere el paquete ipykernel.
Ejecute el siguiente comando para instalar 'ipykernel' en el entorno Python.
Comando: 'conda install -n venv310 ipykernel --update-deps --force-reinstall'

# %% Python 3.10.8 (principal, 24 de noviembre de 2022, 14:13:03) [GCC 11.2.0]
Escriba 'copyright', 'créditos' o 'licencia' para obtener más información
IPython 8.7.0: un interactivo mejorado Pitón. Tipo '?' por ayuda.

Por lo tanto, si ve esto también, ejecute conda install -n venv310 ipykernel --update-deps --force-reinstallen elvenv310.

  • Ejecute %load_ext sqlen la terminal iPython, ya sea escribiéndolo en la terminal o ejecutando la magia desde el editor de Python (haga clic con el botón derecho para ver cómo ejecutar en la ventana interactiva).

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Si tú ves:

ingrese la descripción de la imagen aquí

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'

o si ejecutas la siguiente magia y ves uno de estos:

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

entonces necesitas correr en elvenv310:

conda install -c conda-forge ipython-sql

(y no el instalador de pip pipenv install ipython-sqlcomo está escrito en elguía ipython-sql)

VerUsageError: función mágica de línea %sqlno encontrada

  • De vuelta en VSCode, es posible que veas:

ingrese la descripción de la imagen aquí

Pero eso no hace daño.

  • Corre de nuevo:
%load_ext sql

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

(Ver:¿Cuál es el formato de la cadena/URL de conexión de PostgreSQL? - Desbordamiento de pila)

  • Y ahora puedes ver la salida de SQL en la consola de iPython:
%sql select * FROM x;

ingrese la descripción de la imagen aquí

con la salida posterior. Para conocer el límite de visualización, consulte laguía ipython-sql--> "Configuración".

información relacionada