This code helps you to manage connections to sql databases in jupyter notebooks.
nbdbsession stands for "notebook database session".
I use notebooks very often to connect to databases like postgres. With the notebook sessions, I often work on PoCs (proof of concept), on presentations or on debugging.
catherinedevlin has created open source software that I love: ipython-sql. (Note: There was a fork of this project: jupy-sql. The original version is not actively maintained, and does not work with sqlalchemy version 2 that was released in January 2023)
This code -- nbdbsession -- lets you connect to sql databases from your notebook, and run queries.
First, install it:
pip install nbdbsession
Then, in your git repository where you start your notebook, create a .settings.toml file with your database login credentials:
You need to define your database credentials in a toml file. The toml file should look like this:
# either: .settings.toml on top level of your git repo
# or: $HOME/.nbdbsession.creds.toml
[davidkuda]
db_driver = "postgresql"
database = "dev"
user = "davidkuda"
password = "${DB_PASSWORD}" # you can use environment variables
db_url = "localhost"
port = 5439
# the ssh command is optional:
ssh_cmd = "ssh -fL 5432:db.kuda.ai:5432"nbdbsession will scan three places for a toml file and will choose the first hit in this order:
- env var
$SETTINGS_FILE_PATH - (root directory of a git project)/.settings.toml
$HOME/.nbdbsession.creds.toml
Finally, you can connect to your database in your notebook by running the following code in a cell:
from nbdbsession.sqlconn import connect
connect("davidkuda") # note: this is the name as defined in .settings.tomlOnce you have done that, you can run sql commands by prepending %sql (one line) %%sql (multi-line) in the notebook.
Run single line sql commands directly in your notebook:
%sql SELECT * FROM table LIMIT 10;Run multi-line sql commands directly in your notebook:
%%sql
SELECT
*
FROM
table
LIMIT
10;In the usual way, you would create a connection string, something like this:
%load_ext sql
import parse
# make a connection string for your database connection
config = {
"user": "postgres",
"password": parse.quote("postgres"),
"url": "127.0.0.1",
"port": 5432,
"database": "postgres",
}
conn_string = f'postgresql://{c["user"]}:{c["password"]}@{c["url"]}:{c["port"]}/{c["database"]}'
# results in: 'postgresql://postgres:postgres@127.0.0.1:5432/postgres'
%sql $conn_stringWith the code in this repo, you reduce all that to one line:
from nbdbsession.sqlconn import connect
# this will enable ipython sql and use the conn str that you choose:
connect("staging")
%sql