Skip to main content

Easy Python database interaction

Project description

easy_db

easy_db is a high-level Python library designed to simplify working with databases. The "DataBase" class handles connecting to various types of databases while providing simple methods for common tasks. The underlying database connection and cursor can be used when more precise control is desired.

Currently Supported Databases:

  • SQLite
  • Access
  • ... (Feel free to submit a PR setting up another database type!)

Goals

  • Make common database tasks simple and easy
  • Intelligently handle different database types
  • Provide intuitive, consistent, Pythonic methods database interaction
  • Provide good performance without requiring polished query code
  • Expose database connection and cursor to users wanting fine-grained control
  • Just get the data into Python so we can use it!

Why use easy_db?

Before easy_db:

import pyodbc
import os

conn = pyodbc.connect(
    r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};' +
    r'DBQ=' + os.path.abspath('MyDatabase.accdb') + ';')
cursor = conn.cursor()
cursor.execute('SELECT * FROM test_table;')
data = cursor.fetchall()
columns = [col[0] for col in cursor.description]
table_data = [dict(zip(columns, row)) for row in data]

# table_data -> [{'column1': value1, 'column2': value2}, {...}, ...]

Using easy_db:

import easy_db

db = easy_db.DataBase('MyDatabase.accdb')
table_data = db.pull('test_table')

# table_data -> [{'column1': value1, 'column2': value2}, {...}, ...]

Quick Start

Let's first connect to a SQLite database.

import easy_db
db = easy_db.DataBase('test_sqlite3_db.db')

Now let's see what tables are available in this database.

tables = db.table_names()

Table columns and types are simple to investigate.

print(db.columns_and_types('example_table'))

Let's pull all of the data from a table. We could start with something like "SELECT * ...", but this is way more fun:

data = db.pull('example_table')

Note that the table/query data is returned as a list of dictionaries with column names as dictionary keys.

  • Pro Tip: If desired, a Pandas dataframe of the same form as the database table can be easily created from this data structure using:
import pandas
df = pandas.DataFrame(data)

Now perhaps we have an Access database and would like to pull in a table from our SQLite database. easy_db makes this simple and gracefully handles the nuances of dealing with the different databases.

db = easy_db.DataBase('test_sqlite3_db.db')
db_2 = easy_db.DataBase('test_access_db.accdb')

db_2.copy_table(db, 'example_table')

The DataBase object can be used as a context manager for running custom SQL. The cursor is provided and the connection runs .commit() and .close() implicitly after the "while" block.

with db as cursor:
    cursor.execute('DELETE * FROM example_table;')

easy_db.DataBase Methods

  • Connect to the database...
db = easy_db.DataBase(...)

Pulling Data

db.pull('tablename')
db.pull_where('tablename', 'sql_condition')
db.pull_where_id_in_list('tablename', 'id_column', match_values_list)

Updating Data

db.append('tablename', new_table_rows)  # new_table_rows is a list of dicts
db.update('tablename', 'match_column', 'match_value', 'update_column', 'update_value')
db.delete_duplicates('tablename')

Database Info

db.table_names()
db.query_names()  # for Access
db.columns_and_types('tablename')
db.key_columns('tablename')
db.size  # property with size of database in GB
db.compact_db  # compact & repair Access db or vacuum SQLite db

Table Manipulation

db.create_table('tablename', columns_and_types)
db.drop_table('tablename')
db.copy_table(other_db_with_tablename, 'tablename')
db.add_column('tablename', 'column')
db.drop_column('tablename', 'column')
db.create_index('tablename', 'column')

Custom Control

  • Context manager handles opening, commiting, and closing connection
with db as cursor:
    cursor.execute('SELECT * FROM tablename;')  # execute any SQL statement
  • Can also run .execute() on the database itself (shortcut for the above)
db.execute('SELECT * FROM tablename;')

Thanks for checking out easy_db!

License

MIT

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

easy_db-0.10.2.tar.gz (19.1 kB view details)

Uploaded Source

Built Distribution

easy_db-0.10.2-py3-none-any.whl (18.3 kB view details)

Uploaded Python 3

File details

Details for the file easy_db-0.10.2.tar.gz.

File metadata

  • Download URL: easy_db-0.10.2.tar.gz
  • Upload date:
  • Size: 19.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.2

File hashes

Hashes for easy_db-0.10.2.tar.gz
Algorithm Hash digest
SHA256 e103ba68ebcf7e53a6e17aafddb4b4e00c02e0e0635ea4e6547f48c4e3ee3037
MD5 7a25d81f3382c6f7660b507345c5052b
BLAKE2b-256 4adaecf71b90dbace5255e3ec5ab313bfd60c470f31c9ff47391b5aa5f9d2647

See more details on using hashes here.

File details

Details for the file easy_db-0.10.2-py3-none-any.whl.

File metadata

  • Download URL: easy_db-0.10.2-py3-none-any.whl
  • Upload date:
  • Size: 18.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.2

File hashes

Hashes for easy_db-0.10.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0484e87a0483753fc65d38a7812cf576f29f534badf2ce1c39beabae130663a9
MD5 15ca82febb329191b3ae2474af8f55a5
BLAKE2b-256 557eec960bbcbac1902f24c0f79007138407ef04e95f6402dc9a1aac59441eb0

See more details on using hashes here.

Supported by

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