Skip to main content

Database query code returning numpy arrays

Project description

Build Status Documentation Status Coverage Status DOI

sqlutilpy

Python module to query SQL databases and return numpy arrays, upload tables and run join queries involving local arrays and the tables in the DB. This module is optimized to deal efficiently with query results with millions of rows. The module works with PostgreSQL, SQLite and DuckDB databases.

The full documentation is available here

Author: Sergey Koposov (Uni of Cambridge/CMU/Uni of Edinburgh)

Installation

To install the package you just need to do pip install.

pip install sqlutilpy

Authentication

Throughout this readme, I will assume that if you are using PostgreSQL, then the .pgpass file ( https://www.postgresql.org/docs/11/libpq-pgpass.html ) has been created with your login/password details for Postgresql. If that is not the case, many of the commands given below will also need user='....' and password='...' options.

Connection information

Most of the sqlutilpy commands require hostname, database name.
If you don't want to always type it, you can use standard PostgreSQL environment variables like PGPORT, PGDATABASE, PGUSER, PGHOST for the port, database name, user name and hostname of the connection.

Querying the database and retrieving the results

This command will run the query and put the columns into variables ra,dec:

import sqlutilpy
ra,dec = squtilpy.get('select ra,dec from mytable', 
                 host='HOST_NAME_OF_MY_PG_SERVER', 
                 db='THE_NAME_OF_MY_DB')

By default sqlutilpy.get executes the query and returns the tuple with arrays. One array for each column in the query result. You can return the results as dictionary using asDict option.

Uploading your arrays as column in a table

You can use sqlutilpy.upload to upload your arrays as columns in a table.

x = np.arange(10)                                                   
y = x**.5                                                           
sqlutilpy.upload('mytable',(x,y),('xcol','ycol'))    

This will create a table called mytable with columns xcol and ycol

Join query involving your local data and the database table

Sometimes it is beneficial to run a join query involving your local data and the data in the database.

Imagine you have arrays myid and y and you want to extract all the information from somebigtable for objects with id=myid. In principle, you could upload the arrays in the DB and run a query, but local_join function does that for you.

myid = np.arange(10)
y = np.random.uniform(size=10)

R=sqlutilpy.local_join('''select * from mytmptable as m, 
           somebigtable as s where s.id=m.myid order by m.myid''',                                              
           'mytmptable',(myid, y),('myid','ycol'))

It executes a query as if your arrays were in mytmptable. What happens behind the scenes is that it uploads the data to the database and runs a query against it.

Keeping the connection open.

Often it is beneficial to preserve an open connection to the database. You can do that if you first obtain the connection using sqlutilpy.getConnection() and then provide it directly to sqlutil.get() and similar commands using conn= keyword: conn = sqlutilpy.getConnection(db='mydb', user='meuser', password='something', host='hostname') R= sqlutilpy.get('select 1', conn=conn) R1= sqlutilpy.get('select 1', conn=conn)


# How to cite the software

If you use this package, please cite it through Zenodo https://doi.org/10.5281/zenodo.5160118

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

sqlutilpy-0.27.0.tar.gz (21.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sqlutilpy-0.27.0-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file sqlutilpy-0.27.0.tar.gz.

File metadata

  • Download URL: sqlutilpy-0.27.0.tar.gz
  • Upload date:
  • Size: 21.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for sqlutilpy-0.27.0.tar.gz
Algorithm Hash digest
SHA256 10242ff236c55cd5e347343636321764c678cd1865d2131f4607b32201e0e9fa
MD5 ea9f680be523350fa6a185c447dee653
BLAKE2b-256 236b62807dea3f2056f4a1c843560a457052edbd2f0d0d718c25e9e52c21a911

See more details on using hashes here.

File details

Details for the file sqlutilpy-0.27.0-py3-none-any.whl.

File metadata

  • Download URL: sqlutilpy-0.27.0-py3-none-any.whl
  • Upload date:
  • Size: 12.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for sqlutilpy-0.27.0-py3-none-any.whl
Algorithm Hash digest
SHA256 83dec6b23e3e3a6155d73eb0ec97a8cb59461692840f2c797502e92f79e5cd25
MD5 f421f6790328d4aa1f871f98d29b1adb
BLAKE2b-256 b85981d19c6e524e084ab8f6d47debbd7c43326345fc4a50f449cec842c2e1df

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page