Skip to main content

Import Excel / CSV files directly into MySQL or PostgreSQL from the terminal

Project description


██████╗ ██████╗ ██████╗ ██╗   ██╗███████╗██╗  ██╗
██╔══██╗██╔══██╗██╔══██╗██║   ██║██╔════╝██║  ██║
██║  ██║██████╔╝██████╔╝██║   ██║███████╗███████║
██║  ██║██╔══██╗██╔═══╝ ██║   ██║╚════██║██╔══██║
██████╔╝██████╔╝██║     ╚██████╔╝███████║██║  ██║
╚═════╝ ╚═════╝ ╚═╝      ╚═════╝ ╚══════╝╚═╝  ╚═╝

Import .csv and .xlsx files directly into PostgreSQL and MySQL

— from your terminal or Python code.


PyPI version Python License: MIT PostgreSQL MySQL



What is DBSHEET?

DBSHEET is a zero-boilerplate CLI and Python utility that turns spreadsheet files into live database tables. No schema writing. No manual column mapping. No encoding headaches.

Point it at a file. Configure the database. Done. how to use cli tool

python -m dbpush.cli

The Old Way vs DBSHEET

Without DBSHEET With DBSHEET
Open spreadsheet pip install dbpush==1.0.0
Write a custom parser dbpush (or 3 lines of Python)
Map columns manually ✅ Auto schema from headers
Write SQL CREATE TABLE ✅ Table created automatically
Write INSERT loops ✅ Rows inserted + upserted
Debug encoding issues ✅ Just works

Features

✦ CSV import                ✦ Excel (.xlsx) import
✦ PostgreSQL support        ✦ MySQL support
✦ Auto table creation       ✦ Header-based schema generation
✦ Upsert on duplicate keys  ✦ Interactive CLI
✦ Python API                ✦ Config file support

Installation

pip install dbpush

Quick Start

Config File

Create a config.txt file:

db_type:postgres
host:localhost
port:5432
user:postgres
password:secret
database:mydb
file_name:./data.csv
sheet_name:Sheet1

CLI

Launch the interactive terminal:

dbsheet

Typical workflow:

config_file      # load your config
connect          # connect to the database
create_table     # create table from spreadsheet headers
insert           # insert all rows
select           # view the data

Python API

from dbpush.dbpush import dbpush

db = dbpush.create(
    db_type="postgres",
    host="localhost",
    user="postgres",
    password="secret",
    database="mydb",
    port=5432,
    file_name="./data.csv"
)

db.connect()
db.create_table()
db.insert()
db.select_all()

Supported Formats

File Type Supported
.csv ✅ Yes
.xlsx ✅ Yes

Supported Databases

Database Supported
PostgreSQL ✅ Yes
MySQL ✅ Yes

Example Input

CSV:

id,name,age,salary
1,ram,22,50000
2,radha,25,70000

DBSHEET will:

  • Create a table named data
  • Map each header to a column (id → primary key, rest → text)
  • Insert all rows automatically
  • Upsert if a row with the same primary key already exists

CLI Commands

Command Description
config Configure database connection manually
config_file Load configuration from a file
connect Connect to the database
create_db Create the database if it doesn't exist
create_table Create a table from the spreadsheet headers
insert Insert (or upsert) all rows from the file
select Display all rows from the table
truncate Remove all rows from the table (keep structure)
drop_table Permanently delete the table
row_count Print the number of rows in the spreadsheet
col_count Print the number of columns in the spreadsheet
header Display column names from the spreadsheet
sheet Display the active sheet name
find Search for a row by column value

Python API Reference

dbpush.create(...)

Factory method to create a new Dbsheet instance.

db = dbpush.create(
    db_type="postgres",   # "postgres" or "mysql"
    host="localhost",
    user="postgres",
    password="secret",
    database="mydb",
    port=5432,
    file_name="./data.csv",
    sheet_name="Sheet1"   # optional, for .xlsx files
)

create_db()

Creates the database if it does not already exist.

db.create_db()

connect()

Establishes a connection to the database and prepares the cursor.

db.connect()

create_table()

Reads the spreadsheet headers and creates a matching SQL table.

  • The id column is set as the primary key
  • All other columns are created as text fields
db.create_table()

insert()

Reads all rows from the spreadsheet and inserts them into the table.

Handles duplicate primary keys via upsert — existing rows are updated, new rows are inserted.

db.insert()

select_all()

Prints all rows currently in the table.

db.select_all()

drop_table()

Permanently deletes the table from the database.

db.drop_table()

truncate_table()

Removes all rows from the table while keeping the table structure intact.

db.truncate_table()

row_count()

Prints the total number of data rows in the spreadsheet (excluding the header).

db.row_count()

col_count()

Prints the total number of columns in the spreadsheet.

db.col_count()

show_header()

Prints the list of column names from the spreadsheet header row.

db.show_header()

show_sheet()

Prints the name of the active sheet (relevant for .xlsx files).

db.show_sheet()

find(column, value)

Searches through the spreadsheet rows and returns rows where column matches value.

db.find("name", "ram")
# Returns all rows where the "name" column equals "ram"

Full Examples

PostgreSQL

from dbpush.dbpush import dbpush

db = dbpush.create(
    db_type="postgres",
    host="localhost",
    user="postgres",
    password="secret",
    database="mydb",
    port=5432,
    file_name="./data.csv"
)

db.connect()
db.create_table()
db.insert()
db.select_all()

MySQL

from dbpush.dbpush import dbpush

db = dbpush.create(
    db_type="mysql",
    host="localhost",
    user="root",
    password="secret",
    database="mydb",
    port=3306,
    file_name="./data.xlsx",
    sheet_name="Sheet1"
)

db.connect()
db.create_table()
db.insert()
db.select_all()

Use Cases

  • 🌱 Seeding development and staging databases
  • 🛠 Internal admin tools and dashboards
  • ⚡ Rapid prototyping with real data
  • 📦 Importing spreadsheets from clients
  • 🔄 Lightweight ETL pipelines
  • 📊 Data migration scripts

Project Structure

dbsheet-public/
├── README.md
├── examples/
│   ├── postgres_example.py
│   └── mysql_example.py
├── screenshots/
│   ├── cli.png
│   └── demo.gif
└── roadmap.md

Roadmap

  • Better type inference (int, float, date detection)
  • Connection URI support (postgresql://user:pass@host/db)
  • Batch folder import (import entire directory of files)
  • Improved error messages and validation
  • Export database table → CSV
  • SQLite support

See roadmap.md for full details.


License

MIT © Sarthak sachdeva


If dbpush saved you time, a ⭐ on the repo means a lot.

Built with ♥ by Sarthak sachdeva

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

dbpush-1.0.1.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

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

dbpush-1.0.1-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file dbpush-1.0.1.tar.gz.

File metadata

  • Download URL: dbpush-1.0.1.tar.gz
  • Upload date:
  • Size: 14.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for dbpush-1.0.1.tar.gz
Algorithm Hash digest
SHA256 b60491d99bee06b64d6ab0d5a6d0247d064fd0597415d9afc276ff6944831068
MD5 c25d7d0b089d039ba09d1c8fae2983b7
BLAKE2b-256 2833cf52ee621ba4953e0796c5eab6e39c36c9d8222819ab2b07e1c782613bf6

See more details on using hashes here.

File details

Details for the file dbpush-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: dbpush-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 12.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for dbpush-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 33e49bdb8e15199b0addced873d0b08b7d45b41207fa9f0b32d355f4c235542a
MD5 8c9ed22059191d145de24157cc3a2ad5
BLAKE2b-256 eda529f2631e3c399dc368a2bb8ba7c5e4dac115b57186b3290a266e0d1e0e68

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