Sqlite3 based powerful database project.
Project description
MentoDB
Sqlite3 based powerful database project.
Requirements:
-
Python 3.9.6 or greater version
-
pydantic
->pip install pydantic
-
pandas
->pip install pandas
-
numpy
->pip install numpy
-
Import these two module before start:
from pydantic import BaseModel
from pydantic.dataclasses import dataclass
Working with Base Models
The following code demonstrates how to work with base models in Python using pydantic
and dataclasses
.
Creating a Model Extended from Base Model
The following code creates a model named MyModel
that extends from BaseModel
:
@dataclass
class MyModel(BaseModel):
id: int
name: str
job: str
price: int
Creating a SQL Table with a Model
Here's an example of how to create a SQL table with the MyModel
model:
# Initialize a connection with MentoConnection (similar to "sqlite3.Connection")
con = MentoConnection("./database/new.db", check_same_thread=False)
# Create a database cursor with the connection object.
cursor = Mento(con)
# Create a table with the following structure: (id int, name text, job text, price int)
cursor.create("sample_table", model=MyModel)
Using Primary Key and Unique Column Matches When Creating Tables
Primary Key:
@dataclass
class PrimaryKeySample(BaseModel):
id: PrimaryKey(int)
name: str
age: int
price: int
# Create a table with the following structure: (id int primary key, name text, age int, price int)
cursor.create("primary_sample", model=PrimaryKeySample)
Unique Matches:
@dataclass
class Sample(BaseModel):
id: PrimaryKey(int)
name: str
age: int
price: int
check_match: UniqueMatch("id", "name")
# Create a table with unique match control.
cursor.create("unique_matches_sample", model=Sample)
# Set the check_model parameter to check if there are matches.
# If the table has matched data, the insert process will be stopped.
cursor.check_model = Sample
Data Statements
Create
- Create a table if it does not already exist:
cursor.create("sample", model=Sample)
- Create a table without checking if it already exists:
cursor.create("sample", model=Sample, exists_check=False)
- Create multiple tables:
cursor.create_many(dict(first=MyModel, second=PrimaryKeySample, third=Sample))
Insert
cursor.insert(
"sample",
data=dict(id=1, name="fswair", age=18, price=4250),
# If your model has a UniqueMatch control and you want to check matches, set the model with the check_model keyword argument.
check_model=Sample
)
Select
- Return all rows as a list of dictionaries:
cursor.select("sample")
# Output: [{id: 1, name: fswair, age: 18, price: 4250}]
SELECT
The following are the different methods for returning data from the table using the select
statement in the cursor
object:
-
cursor.select("sample")
: Returns all rows aslist[dict]
->[{id: 1, name: fswair, age: 18, price: 4250}]
-
cursor.select("sample", where={"id": 1, "name": "fswair"})
: Returns all rows matched with the where condition. The condition looks like (in SQL):SELECT * FROM TABLE WHERE id = 1 AND name = 'fswair'
. -
cursor.select("sample", where={"id": 1, "name": "fswair"}, order_by="id")
: Returns all rows matched with the where condition sorted asORDER BY
. The condition looks like (in SQL):SELECT * FROM TABLE WHERE id = 1 AND name = 'fswair' ORDER BY id
. -
cursor.select("sample", select_column="id")
: Returns all row's id columns aslist[dict]
->[{id: 1}, {id: 2}]
-
cursor.select("sample", filter=lambda id: id % 3 == 0)
: Returns all rows matched with the lambda filter (lambda arg must be column name). Example output:list[dict]
->[{id: 3, name: fswair, age: 18, price: 4250}]
. -
cursor.select("sample", regexp={"id": ["\d{1,3}"]})
: Returns all rows matched with regexp patterns (regexp dict must be one key as column name, value could be pattern or list of patterns). Example output:list[dict]
->[{id: 999, name: fswair, age: 18, price: 4250}]
.
Response Formatters for Select Statement
The following are the response formatters for the select statement:
-
cursor.select("table", as_json=True)
: Returns data as JSON. -
cursor.select("table", as_dataframe=True)
: Returns data as a DataFrame (using Pandas). -
cursor.select("table", as_dataframe=True).to_csv()
: Returns data as a CSV file. -
cursor.select("table", model=Sample, as_model=True)
: Returns object list (accessible with attributes).
UPDATE
The following updates the data matched with the where condition:
cursor.update(
"sample",
set_data=dict(name="fswair-up", age=20),
where={"id": 1, "name": "fswair"}
)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file MentoDB-2.1.0.tar.gz
.
File metadata
- Download URL: MentoDB-2.1.0.tar.gz
- Upload date:
- Size: 9.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e273d1552cef8f45f4bf96bbcc2b7f6b1546db134553fcbbfdb3e1eeb0b8afbc |
|
MD5 | 2d3bfee2f3beb1f6b5308cfed911d515 |
|
BLAKE2b-256 | a25988fa4d6ea9e979e5a079695b3413fd710312ddd6a28f9abefd8be1738845 |