- [Fix] Updates docs for querying data frames when using DuckDB SQLAlchemy connections
- [Fix] Support for scanning data frames when using native DuckDB connections due to changes in DuckDB's API
Drops compatibility with Python 3.8
- [Fix] Compatibility with
prettytable>=3.12.0
- [Feature] Removes telemetry
- [Feature]
ploomber-extension
is no longer a dependency
- [Feature] Remove sqlalchemy upper bound (#1020)
- [Fix] Fix error when connections.ini contains a
query
value as dictionary (#1015)
- [Feature] Adds
ploomber-extension
as a dependency
- [Feature] Add option to disable named parameters; options now changed to:
warn
,enabled
, anddisabled
- fixes (#971) and (#972) - [Fix] Fix error when fuzzy matching configuration file (now we only match config keys) (#975 by @maciejb)
- [Fix] Fix error that caused JupySQL to read a config file even when there was no JupySQL config (#975 by @maciejb)
- [Feature] Add support for parametrizing string type arguments of
%%sql
,%sqlplot
,%sqlcmd
' (#699) - [Fix] Fix edge case where
select
and other SQL keywords were not properly used to find where the user's query started, causing argument parsing issues (#973)
- [Feature] Add Spark Connection as a dialect for Jupysql (#965) (by @gilandose)
- [Fix] Fix error when
%sql
includes a query with negative numbers (#958)
- [Fix] Look into
~/.jupysql/config
for config if pyproject.toml does not have a SqlMagic section (#911) - [Fix] Update to be compatible with DuckDB v0.9.0 (#897) and Pandas 2.1.0 (#890)
- [Fix] Pins
sqlplot<20.0.0
- [Feature] Allow user to specify the schema when saving dataframes using
--persist
(#945) - [Fix] Fix bug causing empty result on SQL with trailing semicolon and comment (#907)
- [Fix] Fix bug %sql not parsing JSON arrow operators correctly (#918)
- [Fix] Fixed bug that returns empty results when exception is raised from DB driver
- [Fix] Added guards to check and raise errors when arguments are entered twice in %sql, %sqlcmd and %sqlplot (#806)
- [Fix] Fixed bug that returns snippet typo error message when another table is misspelled (#940)
- [Doc] Use Oracle Database Free for Oracle Database Quick Start tutorial (#943)
- [Feature] Allow user-level config using ~/.jupysql/config (#880)
- [Fix] Remove force deleted snippets from dependent snippet's
with
(#717) - [Fix] Comments added in SQL query to be stripped before saved as snippet (#886)
- [Fix] Fixed bug passing :NUMBER while string slicing in query (#901)
- [Fix] Fixed bug that showed wrong error when querying snippet with invalid function (#902)
- [Fix] Disabled CTE generation when snippets are detected in a non-SELECT type query. (#651, #652)
- [Fix] Fix empty result in certain duckdb
SELECT
andSUMMARIZE
queries with leading comments (#892) - [Fix] Fix incorrect conversion to Pandas/Polars dataframe for PIVOT statement results and InvalidInputException in PIVOT subqueries (#917)
- [Doc] Added
run_statements
to the Python API docs (#922)
- [Feature] Improved messages when loading configurations from
pyproject.toml
file. - [Feature] Add
--schema/-s
for%sqlcmd
commands that support--table/-t
and ensure--table schema.table
works (#519) - [Feature] Add
schema/-s
for%sqlplot
and ensure--table schema.table
works (#854) - [Feature] Expose link in feedback when it is shown in a terminal (#846)
- [Feature] Show feedback when starting a new connection (#807)
- [Feature]
jupysql-plugin
is now bundled withjupysql
by default - [Fix] Fix result not displayed when
SUMMARIZE
argument is used in duckdb with a sqlalchemy connection (#836) - [Fix] Show deprecation warnings for legacy plot API (#513)
- [Fix] Fix error when trying to access previously non-existing file (#840)
- [Fix] Testing with latest DuckDB version (#498)
- [Fix] Remove duplicate integration tests (#827)
- [Doc] Fixed typo in the
./doc/integrations/postgres-connect.ipynb
file (Line 180) (#845) - [Doc] Add chDB integration tutorial
- [Doc] Clarify the use of
pyproject.toml
andconnections.ini
in documentations (#850) - [Doc] Update documentation to use
{{variable}}
instead ofstring.Template
and remove--with
since it's optional (#838)
- [Feature] Automatically connect if the
dsn_filename
(defaults to~/.jupysql/connections.ini
) contains adefault
section - [Feature] Add
%sqlcmd connect
to see existing connections and create new ones (#632) - [Fix] Clearer error messages when failing to initialize a connection
- [Fix] Improve error when passing a non-identifier to start a connection (#764)
- [Fix] Display a warning (instead of raising an error) if the
default
connection in the.ini
file cannot start - [Fix] Display a message instead of an error when
toml
isn't installed andpyproject.toml
is found (#825) - [Fix] Fix argument parsing error on Windows when it contains quotations (#425)
- [Fix] Fix error when a linebreak is included during nonidentifier validation process
- [Fix] Fix error when an argument ending with semicolon is passed to
%sql/%%sql
(#842) - [Doc] Added section on installing database drivers
- [API Change]
%config SqlMagic.feedback
now takes values0
(disabled),1
(normal),2
(verbose) - [API Change] When loading connections from a
.ini
file via%sql --section section_name
, the section name is set as the connection alias - [API Change] Starting connections from a
.ini
file via%sql [section_name]
has been deprecated - [API Change]
%config SqlMagic.dsn_filename
default value changed fromodbc.ini
to~/.jupysql/connections.ini
- [Feature] Add
--binwidth/-W
to ggplot histogram for specifying binwidth (#784) - [Feature] Add
%sqlcmd profile
support for DBAPI connections (#743) - [Fix] Perform
ROLLBACK
when SQLAlchemy raisesPendingRollbackError
- [Fix] Perform
ROLLBACK
whenpsycopg2
raisescurrent transaction is aborted, commands ignored until end of transaction block
- [Fix] Perform
ROLLBACK
whenpsycopg2
raisesserver closed the connection unexpectedly
(#677) - [Fix] Fix a bug that caused a cell with a CTE to fail if it referenced a table/view with the same name as an existing snippet (#753)
- [Fix] Shorter
displaylimit
footer - [Fix]
ResultSet
footer only displayed whenfeedback=2
- [Fix] Current connection and switching connections message only displayed when
feedback>=1
- [Fix]
--persist/--persist-replace
performROLLBACK
automatically when needed - [Fix]
ResultSet
footer (whendisplaylimit
truncates results and when showing how to convert to a data frame) now appears in theResultSet
plain text representation (#682) - [Fix] Improve error when calling
%sqlcmd
(#761) - [Fix] Fix count statement's result not displayed when
displaylimit=None
(#801) - [Fix] Fix an error that caused a connection error message to be turned into a
print
statement - [Fix] Fix Twice message printing when switching to the current connection (#772)
- [Fix] Error when using %sqlplot in snowflake (#697)
- [Doc] Fixes documentation inaccuracy that said
:variable
was deprecated (we brought it back in0.9.0
) - [Fix] Descriptive error messages when specific syntax error occurs when running query in DuckDB or Oracle.
- [Feature] Added
--breaks/-B
to ggplot histogram for specifying breaks (#719) - [Feature] Adds Redshift support for
%sqlplot boxplot
- [Fix] Fix boxplot for duckdb native (#728)
- [Fix] Fix error when using SQL Server with pyodbc that caused queries to fail due to multiple open result sets
- [Fix] Improves performance when converting DuckDB results to
pandas.DataFrame
- [Fix] Fixes a bug when converting a CTE stored with
--save
into apandas.DataFrame
via.DataFrame()
- [Doc] Add Redshift tutorial
- [Feature] Allow loading configuration value from a
pyproject.toml
file upon magic initialization (#689) - [Feature] Adds
with_
to{SQLAlchemyConnection, DBAPIConnection}.raw_execute
to resolve CTEs - [Feature] allows parametrizing queries with
:variable
with%config SqlMagic.named_parameters = True
- [Fix] Fix error that was incorrectly converted into a print message
- [Fix] Modified histogram query to ensure histogram binning is done correctly (#751)
- [Fix] Fix bug that caused the
COMMIT
not to work when the SQLAlchemy driver did not supportset_isolation_level
- [Fix] Fixed vertical color breaks in histograms (#702)
- [Fix] Showing feedback when switching connections (#727)
- [Fix] Fix error that caused some connections not to be closed when calling
--close/-x
- [Fix] Fix bug that caused the query transpilation process to fail when passing multiple statements
- [Fix] Fixes error when creating tables and querying them in the same cell when using DuckDB + SQLAlchemy (#674)
- [Fix] Using native methods to convert to data frames from DuckDB when using native connections and SQLAlchemy
- [Fix] Fix error that caused literals like
':something'
to be interpreted as query parameters
- [Feature] Modified
TableDescription
to add styling, generate messages and format the calculated outputs (#459) - [Feature] Support flexible spacing
myvar=<<
operator (#525) - [Feature] Added a line under
ResultSet
to distinguish it from data frame and error message when invalid operations are performed (#468) - [Feature] Moved
%sqlrender
feature to%sqlcmd snippets
(#647) - [Feature] Added tables listing stored snippets when
%sqlcmd snippets
is called (#648) - [Feature] Better performance when using DuckDB native connection and converting to
pandas.DataFrame
orpolars.DataFrame
- [Fix] Fixed CI issue by updating
invalid_connection_string_duckdb
intest_magic.py
(#631) - [Fix] Refactored
ResultSet
to lazy loading (#470) - [Fix] Removed
WITH
when a snippet does not have a dependency (#657) - [Fix] Used display module when generating CTE (#649)
- [Fix] Adding
--with
back because of issues with sqlglot query parser (#684) - [Fix] Improving
<<
parsing logic (#610) - [Fix] Migrate user feedback to use display module (#548)
- [Doc] Modified integrations content to ensure they're all consistent (#523)
- [Doc] Document
--persist-replace
in API section (#539) - [Doc] Re-organized sections. Adds section showing how to share notebooks via Ploomber Cloud
- [Feature] Modified
histogram
command to support data with NULL values (#176) - [Feature] Automated dependency inference when creating CTEs.
--with
is now deprecated and will display a warning. (#166) - [Feature] Close all connections when Python shuts down (#563)
- [Fix] Fixed
ResultSet
class to display result table with proper style and added relevant example (#54) - [Fix] Fixed
Set
method inConnection
class to recognize same descriptor with different aliases (#532) - [Fix] Added bottom-padding to the buttons in table explorer. Now they are not hidden by the scrollbar (#540)
- [Fix]
psutil
is no longer a dependency for JupySQL (#541) - [Fix] Validating arguments passed to
%%sql
(#561) - [Doc] Added bar and pie examples in the plotting section (#564)
- [Doc] Added more details to the SQL parametrization user guide. (#288)
- [Doc] Snowflake integration guide (#384)
- [Doc] User guide on using JupySQL in
.py
scripts (#449) - [Doc] Added
%magic?
to APIs and quickstart (#97)
- [Feature] Add
%sqlplot bar
and%sqlplot pie
(#508)
- [Feature] Clearer message display when executing queries, listing connections and persisting data frames (#432)
- [Feature]
%sql --connections
now displays an HTML table in Jupyter and a text-based table in the terminal - [Fix] Fix CTE generation when the snippets have trailing semicolons
- [Doc] Hiding connection string when passing
--alias
when opening a connection (#432) - [Doc] Fix
api/magic-sql.md
since it incorrectly stated that listing functions was--list
, but it's--connections
(#432) - [Doc] Added Howto documentation for enabling JupyterLab cell runtime display (#448)
-
[Feature] Add
%sqlcmd explore
to explore tables interactively (#330) -
[Feature] Support for printing capture variables using
=<<
syntax (by @jorisroovers) -
[Feature] Adds
--persist-replace
argument to replace existing tables when persisting data frames (#440) -
[Fix] Fix error when checking if custom connection was PEP 249 Compliant (#517)
-
[Doc] documenting how to manage connections with
Connection
object (#282) -
[Feature] Github Codespace (Devcontainer) support for development (by @jorisroovers) (#484)
-
[Feature] Added bar plot and pie charts to %sqlplot (#417)
- [Feature] Using native DuckDB
.df()
method when usingautopandas
- [Feature] Better error messages when function used in plotting API unsupported by DB driver (#159)
- [Feature] Detailed error messages when syntax error in SQL query, postgres connection password missing or inaccessible, invalid DuckDB connection string (#229)
- [Fix] Fix the default value of %config SqlMagic.displaylimit to 10 (#462)
- [Doc] documenting
%sqlcmd tables
/%sqlcmd columns
No changes
Never deployed due to a CI error
- [Fix] Fixing ipython version to 8.12.0 on python 3.8
- [Fix] Fix
--alias
when passing an existing engine - [Doc] Tutorial on querying excel files with pandas and jupysql (#423)
- [Feature] Support for DB API 2.0 drivers (#350)
- [Feature] Improve boxplot performance (#152)
- [Feature] Add sticky first column styling to sqlcmd profile command
- [Fix] Updates errors so only the error message is displayed (and traceback is hidden) (#407)
- [Fix] Fixes
%sqlcmd plot
when--table
or--column
have spaces (#409) - [Doc] Add QuestDB tutorial (#350)
- [Feature] Upgrades SQLAlchemy version to 2
- [Fix] Fix
%sqlcmd columns
in MySQL and MariaDB - [Fix]
%sqlcmd --test
improved, changes in logic and addition of user guide (#275) - [Doc] Algolia search added (#64)
- [Doc] Updating connecting guide (by @DaveOkpare) (#56)
JupySQL is now available via conda install jupysql -c conda-forge
. Thanks, @sterlinm!
- [API Change] Deprecates old SQL parametrization:
$var
,:var
, and{var}
in favor of{{var}}
- [Feature] Adds
%sqlcmd profile
(#66) - [Feature] Adds
%sqlcmd test
to run tests on tables - [Feature] Adds
--interact
argument to%%sql
to enable interactivity in parametrized SQL queries (#293) - [Feature] Results parse HTTP URLs to make them clickable (#230)
- [Feature] Adds
ggplot
plotting API (histogram and boxplot) - [Feature] Adds
%%config SqlMagic.polars_dataframe_kwargs = {...}
(by @jorisroovers) - [Feature] Adding
sqlglot
to better support SQL dialects in some internal SQL queries - [Fix] Clearer error when using bad table/schema name with
%sqlcmd
and%sqlplot
(#155) - [Fix] Fix
%sqlcmd
exception handling (#262) - [Fix]
--save
+--with
double quotes syntax error in MySQL (#145) - [Fix] Clearer error when using
--with
with snippets that do not exist (#257) - [Fix] Pytds now automatically compatible
- [Fix] Jupysql with autopolars crashes when schema cannot be inferred from the first 100 rows (by @jorisroovers) (#312)
- [Fix] Fix problem where a
%name
in a query (even if commented) would be interpreted as a query parameter (#362) - [Fix] Better support for MySQL and MariaDB (generating internal SQL queries with backticks instead of double quotes)
- [Doc] Tutorial on ETLs via Jupysql and Github actions
- [Doc] SQL keywords autocompletion
- [Doc] Included schema and dataspec into
%sqlrender
API reference
- [Fix] Pinning SQLAlchemy 1.x
- [Feature] Displaying warning when passing a identifier with hyphens to
--save
or--with
- [Fix] Addresses enable AUTOCOMMIT config issue in PostgreSQL (#90)
- [Doc] User guide on querying Github API with DuckDB and JupySQL
Note: This release has been yanked due to an error when using it with SQLAlchemy 2
- [Fix] Adds support for SQL Alchemy 2.0
- [Doc] Summary section on jupysql vs ipython-sql
- [Fix] Displaying variable substitution warning only when the variable to expand exists in the user's namespace
- [Fix] Deprecation warning incorrectly displayed #213
- [Feature] Support new variable substitution using
{{variable}}
format (#137) - [Fix] Adds support for newer versions of prettytable
- [API Change] Drops support for old versions of IPython (removed imports from
IPython.utils.traitlets
) - [Feature] Adds
%%config SqlMagic.autopolars = True
(#138)
- [Feature] Shows missing driver package suggestion message (#124)
- [Fix] Clearer error message on connection failure (#120)
- [Doc] Adds tutorial on querying JSON data
- [Feature] Adds
%jupysql
/%%jupysql
as alias for%sql
/%%sql
- [Fix] Adds community link to
ValueError
andTypeError
- [Feature] Adds
%sqlcmd tables
(#76) - [Feature] Adds
%sqlcmd columns
(#76) - [Fix]
setup.py
fix due to change in setuptools 67.0.0
- Adds example for connecting to a SQLite database with spaces (#35)
- Documents how to securely pass credentials (#40)
- Adds
-a/--alias
option to name connections for easier management (#59) - Adds
%sqlplot
for plotting histograms and boxplots - Adds missing documentation for the Python API
- Several improvements to the
sql.plot
module - Removes
six
as dependency (drops Python 2 support)
- Allow to connect to databases with an existing
sqlalchemy.engine.Engine
object
ResultSet.plot()
,ResultSet.bar()
, andResultSet.pie()
returnmatplotlib.Axes
objects
- Assigns a variable without displaying an output message (#13)
- Updates telemetry key
- Adds anonymous telemetry
- Adds
plot
module (boxplot and histogram)
- Adds
--save
,--with
, and%sqlrender
for SQL composition (#1)
First version release by Ploomber
- Adds
--no-index
option to--persist
data frames without the index
- Fixed .rst file location in MANIFEST.in
- Parse SQL comments in first line
- Bugfixes for DSN,
--close
, others
- Changed most non-SQL commands to argparse arguments (thanks pik)
- User can specify a creator for connections (thanks pik)
- Bogus pseudo-SQL command
PERSIST
removed, replaced with--persist
arg - Turn off echo of connection information with
displaycon
in config - Consistent support for {} variables (thanks Lucas)
- Restored Python 2 compatibility (thanks tokenmathguy)
- Fix truth value of DataFrame error (thanks michael-erasmus)
<<
operator (thanks xiaochuanyu)- added README example (thanks tanhuil)
- bugfix in executing column_local_vars (thanks tebeka)
- pgspecial installation optional (thanks jstoebel and arjoe)
- conceal passwords in connection strings (thanks jstoebel)
- Stop warnings for deprecated use of IPython 3 traitlets in IPython 4 (thanks graphaelli; also stonebig, aebrahim, mccahill)
- README update for keeping connection info private, from eshilts
- Avoid "connection busy" error for SQL Server (thanks Andrés Celis)
- New
column_local_vars
config option submitted by darikg - Avoid contaminating user namespace from locals (thanks alope107)
- Fixed issue number 30, commit failures for sqlite (thanks stonebig, jandot)
- Indentations visible in HTML cells
- COMMIT each SQL statement immediately - prevent locks
- PERSIST pseudo-SQL command added
- Python 3 compatibility restored
- DSN access supported (thanks Berton Earnshaw)
.csv(filename=None)
method added to result sets
-
Reporting of number of rows affected configurable with
feedback
-
Local variables usable as SQL bind variables
Release date: 13-Oct-2013
- displaylimit config parameter
- reports number of rows affected by each query
- test suite working again
- dict-style access for result sets by primary key
Release date: 20-Sep-2013
-
Contributions from Olivier Le Thanh Duong:
-
SQL errors reported without internal IPython error stack
-
Proper handling of configuration
-
-
Added .DataFrame(), .pie(), .plot(), and .bar() methods to result sets
Release date: 01-Aug-2013
Deleted Plugin import left behind in 0.2.2
Release date: 30-July-2013
Converted from an IPython Plugin to an Extension for 1.0 compatibility
Release date: 15-June-2013
-
Recognize socket connection strings
-
Bugfix - issue 4 (remember existing connections by case)
Release date: 30-May-2013
- Accept bind variables (Thanks Mike Wilson!)
Release date: 29-Mar-2013
-
Python 3 compatibility
-
use prettyprint package
-
allow multiple SQL per cell
Release date: 29-Mar-2013
-
Release to PyPI
-
Results returned as lists
-
print(_) to get table form in text console
-
set autolimit and text wrap in configuration
Release date: 21-Mar-2013
- Initial release