Skip to main content

Database-agnostic SQL Interface for Postresql, MySQL, SQLite, DB2 and more

Project description

Introduction

DBPlus is a interface layer between the several python database interfaces and your program. It makes the SQL access from your program database-agnostic meaning the same code can run unmodified on several databases. All you need to change is the database URL. Of course if you use specific SQL that will only work on a certain database DBPlus can not change this.

Installation

The latest stable release from pypi: pip install dbplus

From github: Clone the repository using git and issue "pip install ."

Please note that DBPlus requires you to install the clients and their pre-req's:

  • DB2: ibm_db
  • SQLite: builtin into python (no client required)
  • MySQL: Mysql Connector
  • Oracle: CX_Oracle
  • Postgresql: psycopg2

Documentation : https://klaasbrant.github.io/DBPlus/

Example

from dbplus import Database

# Examples of database urls

#db = Database('SQLite:///test.db')  # driver included in python
#db = Database('Postgres://<user>:<password>@127.0.0.1:5432/dvdrental') # requires psycopg2
#db = Database('MySQL://<user>:<password>@127.0.0.1:3306/test') # requires Mysql Connector
#db = Database('Oracle://<user>:<password>@127.0.0.1:1521/xe') # requires CX_Oracle

db = Database('DB2://db2demo:demodb2@192.168.1.222:50000/sample') # requires ibm_db

# Using named variables in query

rows = db.query('select * from klaas.emp where edlevel=:edlevel and workdept=:wd',edlevel=18,wd='A00')
print(rows,'\n')
print('rows[1]={}\n'.format(rows[1]))
df=rows.as_DataFrame()
print('csv to stdout, check the many options with dataframes!  \n',df.to_csv())

# Full transaction support

with db.transaction():
    # DELETE
    num = db.execute('DELETE FROM klaas.texample')
    print('Rows deleted from klaas.texample={} \n'.format(num))
    # INSERT
    for i in range(1, 11):
        db.execute('INSERT INTO klaas.texample VALUES (?,?)', i, i)
    # UPDATE
    num = db.execute('UPDATE klaas.texample SET col2 = col2+100  WHERE col1 > ?', 5)
    print ('Rows updated in klaas.texample={} \n'.format(num))

# transaction is now commited

print(db.query('select * from klaas.texample'))

Output from example above:

empno firstnme midinit lastname workdept phoneno hiredate job edlevel sex birthdate salary bonus comm
000010 CHRISTINE I HAAS A00 3978 1995-01-01 PRES 18 F 1963-08-24 152750.00 1000.00 4220.00
200010 DIAN J HEMMINGER A00 3978 1995-01-01 SALESREP 18 F 1973-08-14 46500.00 1000.00 4220.00

rows[1]=<Record {"empno": "200010", "firstnme": "DIAN", "midinit": "J", "lastname": "HEMMINGER", "workdept": "A00", "phoneno": "3978", "hiredate": "1995-01-01", "job": "SALESREP", "edlevel": 18, "sex": "F", "birthdate": "1973-08-14", "salary": "46500.00", "bonus": "1000.00", "comm": "4220.00"}>

csv to stdout, check the many options with dataframes! ,birthdate,bonus,comm,edlevel,empno,firstnme,hiredate,job,lastname,midinit,phoneno,salary,sex,workdept 0,1963-08-24,1000.00,4220.00,18,000010,CHRISTINE,1995-01-01,PRES ,HAAS,I,3978,152750.00,F,A00 1,1973-08-14,1000.00,4220.00,18,200010,DIAN,1995-01-01,SALESREP,HEMMINGER,J,3978,46500.00,F,A00

Rows deleted from klaas.texample=10

Rows updated in klaas.texample=5

col1 col2
1 1
2 2
3 3
4 4
5 5
6 106
7 107
8 108
9 109
10 110

What's next?

  • Add tests / bug fixing
  • Add more documentation / examples
  • more cool stuff and of course your suggestions are welcome

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

dbplus-0.4.2.tar.gz (17.1 kB view details)

Uploaded Source

Built Distribution

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

dbplus-0.4.2-py3-none-any.whl (22.7 kB view details)

Uploaded Python 3

File details

Details for the file dbplus-0.4.2.tar.gz.

File metadata

  • Download URL: dbplus-0.4.2.tar.gz
  • Upload date:
  • Size: 17.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.10

File hashes

Hashes for dbplus-0.4.2.tar.gz
Algorithm Hash digest
SHA256 01ca6c4a9ec84e278b410da035d8a1f4cf50d89996eee337b9b2afa24671541a
MD5 d302263969331768552e3a704b26b065
BLAKE2b-256 b6b97c41bac54b77888d695a8a1af10554caa030e0e86efe2fe7b8dfc26108f1

See more details on using hashes here.

File details

Details for the file dbplus-0.4.2-py3-none-any.whl.

File metadata

  • Download URL: dbplus-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 22.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.10

File hashes

Hashes for dbplus-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6613608aae57ce209ffea7cba6a21c104d20c1da3f5262c66cab6df84a7399f9
MD5 30901e67776aed64afc69a5a3abea4f7
BLAKE2b-256 4d09a426349c9815a89a3f0379b0efdb15f854c8340a161036c90c7dd910b7bb

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