Simple wrapper for common mysql queries, including utilities for pandas DataFrames
Project description
mysql_wrap
A wrapper for Python Mysqldb with pandas functionality.
- Emiliano Lupo @HENN, June 2024
- Documentation https://pypi.org/project/mysqlwrap/
- License: GPL v2
Built on top of the SimpleMysql package available at https://github.com/knadh/simplemysql
Installation
with pip:
pip install mysql_wrap
from source:
python -m pip install .
Usage
For normal connection
from mysql_wrap import MysqlWrap, ConnectionOptions
options = ConnectionOptions(
host="127.0.0.1",
db="mydatabase",
user="username",
passwd="password",
keep_alive=True # try and reconnect timedout mysql connections?
)
db = MysqlWrap(**options)
For SSL Connection
from mysql_wrap import MysqlWrap
db = MysqlWrap(
host="127.0.0.1",
db="mydatabase",
user="username",
passwd="password",
ssl = {'cert': 'client-cert.pem', 'key': 'client-key.pem'},
keep_alive=True # try and reconnect timedout mysql connections?
)
# insert a record to the <em>books</em> table
db.insert("books", {"type": "paperback", "name": "Time Machine", "price": 5.55, year: "1997"})
book = db.getOne("books", ["name"], ["year = 1997"])
print "The book's name is " + book.name
Utility methods
getDataTypefromDType(), setMySqlFieldName()
Pandas methods
getTable(), createTable(), SyncColumns(), insertFromDataFrame(), InsertOrUpdateFromDataFrame(), CreateInsertTable(), CreateUpdateTable()
regular Query methods
insert(), update(), insertOrUpdate(), describe(), delete(), getOne(), getAll(), lastId(), query(), tableExist()
insert(table, record{})
Inserts a single record into a table.
db.insert("food", {"type": "fruit", "name": "Apple", "color": "red"})
db.insert("books", {"type": "paperback", "name": "Time Machine", "price": 5.55})
update(table, row{}, condition[])
Update one more or rows based on a condition (or no condition).
# update all rows
db.update("books", {"discount": 0})
# update rows based on a simple hardcoded condition
db.update("books",
{"discount": 10},
["id=1"]
)
# update rows based on a parametrized condition
db.update("books",
{"discount": 10},
("id=%s AND year=%s", [id, year])
)
insertBatch(table, rows{})
Insert Multiple values into table.
# insert multiple values in table
db.insertBatch("books", [{"discount": 0},{"discount":1},{"discount":3}])
insertOrUpdate(table, row{}, key)
Insert a new row, or update if there is a primary key conflict.
# insert a book with id 123. if it already exists, update values
db.insertOrUpdate("books",
{"id": 123, type": "paperback", "name": "Time Machine", "price": 5.55},
"id"
)
getOne(table, fields[], where[], order[], limit[])
getAll(table, fields[], where[], order[], limit[])
Get a single record or multiple records from a table given a condition (or no condition). The resultant rows are returned as namedtuples. getOne() returns a single namedtuple, and getAll() returns a list of namedtuples.
book = db.getOne("books", ["id", "name"])
# get a row based on a simple hardcoded condition
book = db.getOne("books", ["name", "year"], ("id=1"))
# get multiple rows based on a parametrized condition
books = db.getAll("books",
["id", "name"],
("year > %s and price < %s", [year, 12.99])
)
# get multiple rows based on a parametrized condition with an order and limit specified
books = db.getAll("books",
["id", "name", "year"],
("year > %s and price < %s", [year, 12.99]),
["year", "DESC"], # ORDER BY year DESC
[0, 10] # LIMIT 0, 10
)
lastId()
Get the last insert id
# get the last insert ID
db.lastId()
lastQuery()
Get the last query executed
# get the SQL of the last executed query
db.lastQuery()
delete(table, fields[], condition[], order[], limit[])
Delete one or more records based on a condition (or no condition)
# delete all rows
db.delete("books")
# delete rows based on a condition
db.delete("books", ("price > %s AND year < %s", [25, 1999]))
query(table)
Run a raw SQL query. The MySQLdb cursor is returned.
# run a raw SQL query
db.query("DELETE FROM books WHERE year > 2005")
commit()
Insert, update, and delete operations on transactional databases such as innoDB need to be committed
# Commit all pending transaction queries
db.commit()
To run tests:
-
add your test file to the tests/ folder
-
import the modules you want to test using src.folder.module path
-
run tests from terminal from the project root folder: python3 -m unittest tests.{test file}
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mysql_wrap-1.1.3.tar.gz.
File metadata
- Download URL: mysql_wrap-1.1.3.tar.gz
- Upload date:
- Size: 11.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.7.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c5aa7482fab635eafa4ee043f226213d964b1e80156fe3e1bf37397fb786501f
|
|
| MD5 |
9fcf7ee25a39bc7ec00ceac8747ac035
|
|
| BLAKE2b-256 |
1ea115863053190833b2ae4835a8f91d6bff1893666fb5c999f7245965bb6a92
|
File details
Details for the file mysql_wrap-1.1.3-py3-none-any.whl.
File metadata
- Download URL: mysql_wrap-1.1.3-py3-none-any.whl
- Upload date:
- Size: 9.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.7.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a15aae229209ff314725e8587cc3fb15e00a42f9dc223b09291f4f6fee77dd93
|
|
| MD5 |
54f73bf64df3235aa6de18551ae4d9dd
|
|
| BLAKE2b-256 |
caeab1a69ac50332b2f8fab495704aad3a263bd9449710c7d26871f8bb4653a2
|