I’m new to jupyter notebooks, but wanna learn it. Currently I’m trying out some basic db opperations with sql magic. I can build a connection and create a new table. But when I try to read out the table this non specific error occurs. Can anybody help me out?
My “code”:
- Loading stuff:
import sys
print(sys.executable)
from sqlalchemy.engine import create_engine
import pandas as pd
%load_ext sql
#setup database connection
%sql postgresql://postgres:postgres@localhost:5432/rain
- Create Table:
%%sql
CREATE TABLE people (first text, last text, drink text);
INSERT INTO people (first,last,drink)
VALUES
('zaphod','beeblebrox','pan galactic gargle blaster'),
('arthur','dent','tea'),
('ford','prefect','old janx spirit')
;
- trying to get the table:
%sql select * from people;
The Error:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
Cell In[40], line 1
----> 1 get_ipython().run_cell_magic('sql', '', 'nselect * from people;n')
File ~/.local/share/pipx/venvs/jupyterlab/lib/python3.12/site-packages/IPython/core/interactiveshell.py:2541, in InteractiveShell.run_cell_magic(self, magic_name, line, cell)
2539 with self.builtin_trap:
2540 args = (magic_arg_s, cell)
-> 2541 result = fn(*args, **kwargs)
2543 # The code below prevents the output from being displayed
2544 # when using magics with decorator @output_can_be_silenced
2545 # when the last Python token in the expression is a ';'.
2546 if getattr(fn, magic.MAGIC_OUTPUT_CAN_BE_SILENCED, False):
File ~/.local/share/pipx/venvs/jupyterlab/lib/python3.12/site-packages/sql/magic.py:219, in SqlMagic.execute(self, line, cell, local_ns)
216 return
218 try:
--> 219 result = sql.run.run(conn, parsed["sql"], self, user_ns)
221 if (
222 result is not None
223 and not isinstance(result, str)
(...)
226 # Instead of returning values, set variables directly in the
227 # user's namespace. Variable names given by column names
229 if self.autopandas:
File ~/.local/share/pipx/venvs/jupyterlab/lib/python3.12/site-packages/sql/run.py:374, in run(conn, sql, config, user_namespace)
372 if result and config.feedback:
373 print(interpret_rowcount(result.rowcount))
--> 374 resultset = ResultSet(result, config)
375 if config.autopandas:
376 return resultset.DataFrame()
File ~/.local/share/pipx/venvs/jupyterlab/lib/python3.12/site-packages/sql/run.py:116, in ResultSet.__init__(self, sqlaproxy, config)
114 list.__init__(self, sqlaproxy.fetchall())
115 self.field_names = unduplicate_field_names(self.keys)
--> 116 self.pretty = PrettyTable(self.field_names, style=prettytable.__dict__[config.style.upper()])
117 else:
118 list.__init__(self, [])
KeyError: 'DEFAULT'
1
From the log message error is thrown from prettyTable, could be related to how results are rendered.
Try setting this, this will return the results in a plain text format.
%config SqlMagic.style = 'PLAIN'
Also try setting this for prettyTable
%config SqlMagic.style = 'DEFAULT'
2