Securely read sql into a pandas dataframe from a remote mysql DB
Project description
Remote read_sql
Read SQL into a pandas data frame from a remote server
Installation
pip install remote-read-sql
Usage
In this example, remote_read_sql opens an ssh tunnel and connects to the mysql server locally on port 3306. The SQL query is sanitized and passed to pandas read_sql.
After reading the data into the dataframe, the ssh and db connections are closed.
Storing your credentials in files
You should read your credentials from a file or files. Do not write credentials directly in your notebook.
In this example, the ssh credentials are in a ENV file that might look something like this:
SSH_SERVER_IP=server.example.com SSH_USER=user SSH_KEY_PATH=~/.ssh/id_rsa SSH_KEY_PASS= LOCAL_BIND_PORT=3307 REMOTE_HOST=127.0.0.1 LOCAL_BIND_PORT=3307 REMOTE_DB_PORT=3306
and the mysql credentials are in the my.cnf file and might look like this:
[remote_server] user=user_readonly password=password default-character-set=utf8 host=127.0.0.1 port=3306
Preparing your credentials
Since you may be calling remote_read_sql several times in the same notebook, store the paths to your credentials in a dictionary as a convenience.
# change to your own paths
ssh_config_path = Path("~/.my_ssh_config")
my_cnf_path = Path("~/.my.cnf")
db_name = "my_database"
# combine kwargs into a dictionary
conn_opts = {
"ssh_config_path": ssh_config_path,
"my_cnf_path": my_cnf_path,
"my_cnf_connection_name": "remote_server",
"db_name": db_name,
}
Running a single query
To run a single query and return a Dataframe, pass the SQL query to remote_read_sql along with your conn_opts from above. The SQL query must be a valid SELECT query.
# open ssh, open db, read SQL into dataframe, close db, close ssh
df = remote_read_sql("SELECT * FROM subject_glucose", **conn_opts)
# inspect the dataframe
df.head()
Running multiple queries
When running remote_read_sql with the SQL query as above, the connection closes immediately after running the SQL statement. If you want to run several SQL queries using the same connection, use remote_connect as a context manager.
remote_connect opens the connection.
call pd.read_sql() for multiple SQL queries within the with statement
Once you leave the with statement, remote_connect closes the connection.
If you have read/write permissions to your database, you may want to pass your query through safe_sql before you pass it to pandas read_sql.
import pandas as pd
from remote_read_sql import remote_connect, safe_sql
with remote_connect(**conn_opts) as db_conn:
# connection db_conn is open
# read sql
df_glucose = pd.read_sql(safe_sql("SELECT * FROM subject_glucose"), db_conn)
# read sql
df_bp = pd.read_sql(safe_sql("SELECT * FROM subject_bp"), db_conn)
# connection db_conn is closed
# view your Dataframes
df_glucose.head()
df_bp.head()
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file remote_read_sql-1.2.3.tar.gz.
File metadata
- Download URL: remote_read_sql-1.2.3.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1305f229a11b34674f605937c04f18a4bc3d330f84ec395ad3773c18bbeefb85
|
|
| MD5 |
3c3ae7a73c96d6b8f2c30dc6e27c0e04
|
|
| BLAKE2b-256 |
3883c7f08d30147c4ae22d07332b2fc3d9ade96d77ab306fc4333c256e500b2c
|
File details
Details for the file remote_read_sql-1.2.3-py3-none-any.whl.
File metadata
- Download URL: remote_read_sql-1.2.3-py3-none-any.whl
- Upload date:
- Size: 7.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bae60f0c7435aa1075934555dba38a6fbce433a4feb589077c25e6ce8c6266d8
|
|
| MD5 |
146dbe1baaaf36bfc6d164eb58e94da6
|
|
| BLAKE2b-256 |
bcf27d73febbb8eae9083f09b9ff1f8d6cb4091d63851e5e73ab5ade4ca42ac5
|