Metadata-Version: 2.4
Name: dbpush
Version: 1.0.1
Summary: Import Excel / CSV files directly into MySQL or PostgreSQL from the terminal
Home-page: https://github.com/RangamRKSS/dbpush
Author: Sarthak sachdeva
Author-email: Sarthak sachdeva <rangamapp@gmail.com>
License: MIT
Project-URL: Homepage, https://github.com/RangamRKSS/dbpush
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Requires-Dist: psycopg[binary]>=3.0
Requires-Dist: mysql-connector-python>=8.0
Requires-Dist: openpyxl>=3.0
Requires-Dist: rich>=13.0
Dynamic: author
Dynamic: home-page
Dynamic: requires-python

<div align="center">

<br/>

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

### Import `.csv` and `.xlsx` files directly into PostgreSQL and MySQL
### — from your terminal or Python code.

<br/>

[![PyPI version](https://img.shields.io/pypi/v/dbsheet?color=0f172a&labelColor=38bdf8&style=for-the-badge)](https://pypi.org/project/dbpush/1.0.0/)
[![Python](https://img.shields.io/badge/Python-3.7+-0f172a?labelColor=facc15&style=for-the-badge)](https://python.org)
[![License: MIT](https://img.shields.io/badge/License-MIT-0f172a?labelColor=4ade80&style=for-the-badge)](LICENSE)
[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-✓-0f172a?labelColor=818cf8&style=for-the-badge)]()
[![MySQL](https://img.shields.io/badge/MySQL-✓-0f172a?labelColor=f472b6&style=for-the-badge)]()

<br/>

</div>

---

## 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

```bash
pip install dbpush
```

---

## Quick Start

### Config File

Create a `config.txt` file:

```txt
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:

```bash
dbsheet
```

Typical workflow:

```bash
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

```python
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:**
```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.

```python
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.

```python
db.create_db()
```

---

### `connect()`

Establishes a connection to the database and prepares the cursor.

```python
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

```python
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.

```python
db.insert()
```

---

### `select_all()`

Prints all rows currently in the table.

```python
db.select_all()
```

---

### `drop_table()`

Permanently deletes the table from the database.

```python
db.drop_table()
```

---

### `truncate_table()`

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

```python
db.truncate_table()
```

---

### `row_count()`

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

```python
db.row_count()
```

---

### `col_count()`

Prints the total number of columns in the spreadsheet.

```python
db.col_count()
```

---

### `show_header()`

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

```python
db.show_header()
```

---

### `show_sheet()`

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

```python
db.show_sheet()
```

---

### `find(column, value)`

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

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

---

## Full Examples

### PostgreSQL

```python
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

```python
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`](roadmap.md) for full details.

---

## License

MIT © [Sarthak sachdeva](https://github.com/RangamRKSS)

---

<div align="center">

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

Built with ♥ by **Sarthak sachdeva**

</div>
