- [Fix] No longer showing the Slack link in error messages
- [API Change] Disabled
%sqland%%sqlon Databricks (#1047)
- [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-extensionis no longer a dependency
- [Feature] Remove sqlalchemy upper bound (#1020)
- [Fix] Fix error when connections.ini contains a
queryvalue as dictionary (#1015)
- [Feature] Adds
ploomber-extensionas 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
selectand 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
%sqlincludes a query with negative numbers (#958)
- [Fix] Look into
~/.jupysql/configfor 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
SELECTandSUMMARIZEqueries 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_statementsto the Python API docs (#922)
- [Feature] Improved messages when loading configurations from
pyproject.tomlfile. - [Feature] Add
--schema/-sfor%sqlcmdcommands that support--table/-tand ensure--table schema.tableworks (#519) - [Feature] Add
schema/-sfor%sqlplotand ensure--table schema.tableworks (#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-pluginis now bundled withjupysqlby default - [Fix] Fix result not displayed when
SUMMARIZEargument 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.ipynbfile (Line 180) (#845) - [Doc] Add chDB integration tutorial
- [Doc] Clarify the use of
pyproject.tomlandconnections.iniin documentations (#850) - [Doc] Update documentation to use
{{variable}}instead ofstring.Templateand remove--withsince it's optional (#838)
- [Feature] Automatically connect if the
dsn_filename(defaults to~/.jupysql/connections.ini) contains adefaultsection - [Feature] Add
%sqlcmd connectto 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
defaultconnection in the.inifile cannot start - [Fix] Display a message instead of an error when
tomlisn't installed andpyproject.tomlis 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.feedbacknow takes values0(disabled),1(normal),2(verbose) - [API Change] When loading connections from a
.inifile via%sql --section section_name, the section name is set as the connection alias - [API Change] Starting connections from a
.inifile via%sql [section_name]has been deprecated - [API Change]
%config SqlMagic.dsn_filenamedefault value changed fromodbc.inito~/.jupysql/connections.ini - [Feature] Add
--binwidth/-Wto ggplot histogram for specifying binwidth (#784) - [Feature] Add
%sqlcmd profilesupport for DBAPI connections (#743) - [Fix] Perform
ROLLBACKwhen SQLAlchemy raisesPendingRollbackError - [Fix] Perform
ROLLBACKwhenpsycopg2raisescurrent transaction is aborted, commands ignored until end of transaction block - [Fix] Perform
ROLLBACKwhenpsycopg2raisesserver 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
displaylimitfooter - [Fix]
ResultSetfooter only displayed whenfeedback=2 - [Fix] Current connection and switching connections message only displayed when
feedback>=1 - [Fix]
--persist/--persist-replaceperformROLLBACKautomatically when needed - [Fix]
ResultSetfooter (whendisplaylimittruncates results and when showing how to convert to a data frame) now appears in theResultSetplain 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
printstatement - [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
:variablewas 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/-Bto 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
--saveinto apandas.DataFramevia.DataFrame() - [Doc] Add Redshift tutorial
- [Feature] Allow loading configuration value from a
pyproject.tomlfile upon magic initialization (#689) - [Feature] Adds
with_to{SQLAlchemyConnection, DBAPIConnection}.raw_executeto resolve CTEs - [Feature] allows parametrizing queries with
:variablewith%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
COMMITnot 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
TableDescriptionto add styling, generate messages and format the calculated outputs (#459) - [Feature] Support flexible spacing
myvar=<<operator (#525) - [Feature] Added a line under
ResultSetto distinguish it from data frame and error message when invalid operations are performed (#468) - [Feature] Moved
%sqlrenderfeature to%sqlcmd snippets(#647) - [Feature] Added tables listing stored snippets when
%sqlcmd snippetsis called (#648) - [Feature] Better performance when using DuckDB native connection and converting to
pandas.DataFrameorpolars.DataFrame - [Fix] Fixed CI issue by updating
invalid_connection_string_duckdbintest_magic.py(#631) - [Fix] Refactored
ResultSetto lazy loading (#470) - [Fix] Removed
WITHwhen a snippet does not have a dependency (#657) - [Fix] Used display module when generating CTE (#649)
- [Fix] Adding
--withback 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-replacein API section (#539) - [Doc] Re-organized sections. Adds section showing how to share notebooks via Ploomber Cloud
- [Feature] Modified
histogramcommand to support data with NULL values (#176) - [Feature] Automated dependency inference when creating CTEs.
--withis now deprecated and will display a warning. (#166) - [Feature] Close all connections when Python shuts down (#563)
- [Fix] Fixed
ResultSetclass to display result table with proper style and added relevant example (#54) - [Fix] Fixed
Setmethod inConnectionclass 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]
psutilis 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
.pyscripts (#449) - [Doc] Added
%magic?to APIs and quickstart (#97)
- [Feature] Add
%sqlplot barand%sqlplot pie(#508)
- [Feature] Clearer message display when executing queries, listing connections and persisting data frames (#432)
- [Feature]
%sql --connectionsnow 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
--aliaswhen opening a connection (#432) - [Doc] Fix
api/magic-sql.mdsince 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 exploreto explore tables interactively (#330) -
[Feature] Support for printing capture variables using
=<<syntax (by @jorisroovers) -
[Feature] Adds
--persist-replaceargument 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
Connectionobject (#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
--aliaswhen 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 plotwhen--tableor--columnhave spaces (#409) - [Doc] Add QuestDB tutorial (#350)
- [Feature] Upgrades SQLAlchemy version to 2
- [Fix] Fix
%sqlcmd columnsin MySQL and MariaDB - [Fix]
%sqlcmd --testimproved, 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 testto run tests on tables - [Feature] Adds
--interactargument to%%sqlto enable interactivity in parametrized SQL queries (#293) - [Feature] Results parse HTTP URLs to make them clickable (#230)
- [Feature] Adds
ggplotplotting API (histogram and boxplot) - [Feature] Adds
%%config SqlMagic.polars_dataframe_kwargs = {...}(by @jorisroovers) - [Feature] Adding
sqlglotto better support SQL dialects in some internal SQL queries - [Fix] Clearer error when using bad table/schema name with
%sqlcmdand%sqlplot(#155) - [Fix] Fix
%sqlcmdexception handling (#262) - [Fix]
--save+--withdouble quotes syntax error in MySQL (#145) - [Fix] Clearer error when using
--withwith 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
%namein 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
%sqlrenderAPI reference
- [Fix] Pinning SQLAlchemy 1.x
- [Feature] Displaying warning when passing a identifier with hyphens to
--saveor--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/%%jupysqlas alias for%sql/%%sql - [Fix] Adds community link to
ValueErrorandTypeError
- [Feature] Adds
%sqlcmd tables(#76) - [Feature] Adds
%sqlcmd columns(#76) - [Fix]
setup.pyfix 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/--aliasoption to name connections for easier management (#59) - Adds
%sqlplotfor plotting histograms and boxplots - Adds missing documentation for the Python API
- Several improvements to the
sql.plotmodule - Removes
sixas dependency (drops Python 2 support)
- Allow to connect to databases with an existing
sqlalchemy.engine.Engineobject
ResultSet.plot(),ResultSet.bar(), andResultSet.pie()returnmatplotlib.Axesobjects
- Assigns a variable without displaying an output message (#13)
- Updates telemetry key
- Adds anonymous telemetry
- Adds
plotmodule (boxplot and histogram)
- Adds
--save,--with, and%sqlrenderfor SQL composition (#1)
First version release by Ploomber
- Adds
--no-indexoption to--persistdata 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
PERSISTremoved, replaced with--persistarg - Turn off echo of connection information with
displayconin 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_varsconfig 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