# Fast MySQL driver build in Cython (Sync and Async).
Created to be used in a project, this package is published to github for ease of management and installation across different modules.
## Installation
Install from `PyPi`
```bash
pip install sqlcycli
```
Install from `github`
```bash
pip install git+https://github.com/AresJef/SqlCyCli.git
```
## Requirements
- Python 3.10 or higher.
- MySQL 5.5 or higher.
## Features
- Written in [Cython](https://cython.org/) for optimal performance (especially for SELECT/INSERT query).
- All classes and methods are well documented and type annotated.
- Supports both `Sync` and `Async` connection to the server.
- API Compatiable with [PyMySQL](https://github.com/PyMySQL/PyMySQL) and [aiomysql](https://github.com/aio-libs/aiomysql).
- Support conversion (escape) for most of the native python types, and objects from libaray [numpy](https://github.com/numpy/numpy) and [pandas](https://github.com/pandas-dev/pandas). Does `NOT` support custom conversion (escape).
## Benchmark
The following result comes from [benchmark](./src/benchmark.py):
- Device: MacbookPro M1Pro(2E8P) 32GB
- Python: 3.12.4
- PyMySQL: 1.1.1
- aiomysql: 0.2.0
- asyncmy: 0.2.9
```
# Unit: second | Lower is better
name type rows insert-per-row insert-bulk select-per-row select-all
SQLCyCli sync 50000 2.428453 0.367404 2.526141 0.078057
PyMySQL sync 50000 2.821481 0.480322 4.784844 0.335978
SQLCyCli async 50000 3.757844 0.340909 5.017284 0.157078
aiomysql async 50000 3.845818 0.419444 5.764339 0.333526
asyncmy async 50000 4.015180 0.484794 6.144809 0.337285
```
```
# Unit: second | Lower is better
name type rows update-per-row update-all delete-per-row delete-all
SQLCyCli sync 50000 2.597837 0.327441 2.251010 0.131872
PyMySQL sync 50000 3.044907 0.368951 2.789961 0.158141
SQLCyCli async 50000 4.226546 0.369085 3.994125 0.139679
aiomysql async 50000 3.792293 0.356109 3.589203 0.134762
asyncmy async 50000 4.160017 0.362896 3.928555 0.145456
```
## Usage
### Use `connect()` to create a connection (`Sync` or `Async`) with the server.
```python
import asyncio
import sqlcycli
HOST = "localhost"
PORT = 3306
USER = "root"
PSWD = "password"
# Connection (Sync & Async)
async def test_connection() -> None:
# Sync Connection - - - - - - - - - - - - - - - - - -
with sqlcycli.connect(HOST, PORT, USER, PSWD) as conn:
with conn.cursor() as cur:
cur.execute("SELECT 1")
assert cur.fetchone() == (1,)
# Connection closed
assert conn.closed()
# Async Connection - - - - - - - - - - - - - - - - -
async with sqlcycli.connect(HOST, PORT, USER, PSWD) as conn:
async with conn.cursor() as cur:
await cur.execute("SELECT 1")
assert await cur.fetchone() == (1,)
# Connection closed
assert conn.closed()
if __name__ == "__main__":
asyncio.run(test_connection())
```
### Use `create_pool()` to create a Pool for managing and maintaining connections (`Sync` or `Async`) with the server.
```python
import asyncio
import sqlcycli
HOST = "localhost"
PORT = 3306
USER = "root"
PSWD = "password"
# Pool (Context: Connected)
async def test_pool_context_connected() -> None:
async with sqlcycli.create_pool(HOST, PORT, USER, PSWD, min_size=1) as pool:
# Pool is connected: 1 free connection (min_size=1)
assert not pool.closed() and pool.free == 1
# Sync Connection - - - - - - - - - - - - - - - - - -
with pool.acquire() as conn:
with conn.cursor() as cur:
cur.execute("SELECT 1")
assert cur.fetchone() == (1,)
# Async Connection - - - - - - - - - - - - - - - - -
async with pool.acquire() as conn:
async with conn.cursor() as cur:
await cur.execute("SELECT 1")
assert await cur.fetchone() == (1,)
# Pool closed
assert pool.closed() and pool.total == 0
# Pool (Context: Disconnected)
async def test_pool_context_disconnected() -> None:
with sqlcycli.create_pool(HOST, PORT, USER, PSWD, min_size=1) as pool:
# Pool is not connected: 0 free connection (min_size=1)
assert pool.closed() and pool.free == 0
# Sync Connection - - - - - - - - - - - - - - - - - -
with pool.acquire() as conn:
with conn.cursor() as cur:
cur.execute("SELECT 1")
assert cur.fetchone() == (1,)
# Async Connection - - - - - - - - - - - - - - - - -
async with pool.acquire() as conn:
async with conn.cursor() as cur:
await cur.execute("SELECT 1")
assert await cur.fetchone() == (1,)
# 1 free async connection
assert pool.free == 1
# Pool closed
assert pool.closed() and pool.total == 0
if __name__ == "__main__":
asyncio.run(test_pool_context_connected())
asyncio.run(test_pool_context_disconnected())
```
### Use the `Pool` class to create a Pool instance. `Must close manually`.
```python
import asyncio
import sqlcycli
HOST = "localhost"
PORT = 3306
USER = "root"
PSWD = "password"
# Pool (Instance: Connected)
async def test_pool_instance_connected() -> None:
pool = await sqlcycli.create_pool(HOST, PORT, USER, PSWD, min_size=1)
# Pool is connected: 1 free connection (min_size=1)
assert not pool.closed() and pool.free == 1
# Sync Connection - - - - - - - - - - - - - - - - - -
with pool.acquire() as conn:
with conn.cursor() as cur:
cur.execute("SELECT 1")
assert cur.fetchone() == (1,)
# Async Connection - - - - - - - - - - - - - - - - -
async with pool.acquire() as conn:
async with conn.cursor() as cur:
await cur.execute("SELECT 1")
assert await cur.fetchone() == (1,)
# Close pool manually
await pool.close()
assert pool.closed() and pool.total == 0
# Pool (Instance: Disconnected)
async def test_pool_instance_disconnected() -> None:
pool = sqlcycli.Pool(HOST, PORT, USER, PSWD, min_size=1)
# Pool is not connected: 0 free connection (min_size=1)
assert pool.closed() and pool.free == 0
# Sync Connection - - - - - - - - - - - - - - - - - -
with pool.acquire() as conn:
with conn.cursor() as cur:
cur.execute("SELECT 1")
assert cur.fetchone() == (1,)
# Async Connection - - - - - - - - - - - - - - - - -
async with pool.acquire() as conn:
async with conn.cursor() as cur:
await cur.execute("SELECT 1")
assert await cur.fetchone() == (1,)
# 1 free async connection
assert pool.free == 1
# Close pool manually
await pool.close()
assert pool.closed() and pool.total == 0
if __name__ == "__main__":
asyncio.run(test_pool_instance_connected())
asyncio.run(test_pool_instance_disconnected())
```
### Use the `sqlfunc` module to escape values for MySQL functions.
```python
import asyncio
import datetime
import sqlcycli
from sqlcycli import sqlfunc
HOST = "localhost"
PORT = 3306
USER = "root"
PSWD = "Password_123456"
# SQLFunction
def test_sqlfunction() -> None:
with sqlcycli.connect(HOST, PORT, USER, PSWD) as conn:
with conn.cursor() as cur:
cur.execute("SELECT %s", sqlfunc.TO_DAYS(datetime.date(2007, 10, 7)))
# SQLFunction 'TO_DAYS()' escaped as: TO_DAYS('2007-10-07')
assert cur.executed_sql == "SELECT TO_DAYS('2007-10-07')"
assert cur.fetchone() == (733321,)
# Connection closed
assert conn.closed()
if __name__ == "__main__":
test_sqlfunction()
```
## Acknowledgements
SQLCyCli is build on top of the following open-source repositories:
- [aiomysql](https://github.com/aio-libs/aiomysql)
- [PyMySQL](https://github.com/PyMySQL/PyMySQL)
SQLCyCli is based on the following open-source repositories:
- [numpy](https://github.com/numpy/numpy)
- [orjson](https://github.com/ijl/orjson)
- [pandas](https://github.com/pandas-dev/pandas)
Raw data
{
"_id": null,
"home_page": "https://github.com/AresJef/SQLCyCli",
"name": "sqlcycli",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "mysql, mariadb, pymysql, aiomysql, cython, asyncio",
"author": "Jiefu Chen",
"author_email": "keppa1991@163.com",
"download_url": "https://files.pythonhosted.org/packages/36/40/394ba62f7c7f5cdd2599cf824e10276253e9ae07e94727b92accc114d20c/sqlcycli-1.5.2.tar.gz",
"platform": null,
"description": "# Fast MySQL driver build in Cython (Sync and Async).\n\nCreated to be used in a project, this package is published to github for ease of management and installation across different modules.\n\n## Installation\n\nInstall from `PyPi`\n\n```bash\npip install sqlcycli\n```\n\nInstall from `github`\n\n```bash\npip install git+https://github.com/AresJef/SqlCyCli.git\n```\n\n## Requirements\n\n- Python 3.10 or higher.\n- MySQL 5.5 or higher.\n\n## Features\n\n- Written in [Cython](https://cython.org/) for optimal performance (especially for SELECT/INSERT query).\n- All classes and methods are well documented and type annotated.\n- Supports both `Sync` and `Async` connection to the server.\n- API Compatiable with [PyMySQL](https://github.com/PyMySQL/PyMySQL) and [aiomysql](https://github.com/aio-libs/aiomysql).\n- Support conversion (escape) for most of the native python types, and objects from libaray [numpy](https://github.com/numpy/numpy) and [pandas](https://github.com/pandas-dev/pandas). Does `NOT` support custom conversion (escape).\n\n## Benchmark\n\nThe following result comes from [benchmark](./src/benchmark.py):\n\n- Device: MacbookPro M1Pro(2E8P) 32GB\n- Python: 3.12.4\n- PyMySQL: 1.1.1\n- aiomysql: 0.2.0\n- asyncmy: 0.2.9\n\n```\n# Unit: second | Lower is better\nname type rows insert-per-row insert-bulk select-per-row select-all\nSQLCyCli sync 50000 2.428453 0.367404 2.526141 0.078057\nPyMySQL sync 50000 2.821481 0.480322 4.784844 0.335978\nSQLCyCli async 50000 3.757844 0.340909 5.017284 0.157078\naiomysql async 50000 3.845818 0.419444 5.764339 0.333526\nasyncmy async 50000 4.015180 0.484794 6.144809 0.337285\n```\n\n```\n# Unit: second | Lower is better\nname type rows update-per-row update-all delete-per-row delete-all\nSQLCyCli sync 50000 2.597837 0.327441 2.251010 0.131872\nPyMySQL sync 50000 3.044907 0.368951 2.789961 0.158141\nSQLCyCli async 50000 4.226546 0.369085 3.994125 0.139679\naiomysql async 50000 3.792293 0.356109 3.589203 0.134762\nasyncmy async 50000 4.160017 0.362896 3.928555 0.145456\n```\n\n## Usage\n\n### Use `connect()` to create a connection (`Sync` or `Async`) with the server.\n\n```python\nimport asyncio\nimport sqlcycli\n\nHOST = \"localhost\"\nPORT = 3306\nUSER = \"root\"\nPSWD = \"password\"\n\n# Connection (Sync & Async)\nasync def test_connection() -> None:\n # Sync Connection - - - - - - - - - - - - - - - - - -\n with sqlcycli.connect(HOST, PORT, USER, PSWD) as conn:\n with conn.cursor() as cur:\n cur.execute(\"SELECT 1\")\n assert cur.fetchone() == (1,)\n\n # Connection closed\n assert conn.closed()\n\n # Async Connection - - - - - - - - - - - - - - - - -\n async with sqlcycli.connect(HOST, PORT, USER, PSWD) as conn:\n async with conn.cursor() as cur:\n await cur.execute(\"SELECT 1\")\n assert await cur.fetchone() == (1,)\n\n # Connection closed\n assert conn.closed()\n\nif __name__ == \"__main__\":\n asyncio.run(test_connection())\n```\n\n### Use `create_pool()` to create a Pool for managing and maintaining connections (`Sync` or `Async`) with the server.\n\n```python\nimport asyncio\nimport sqlcycli\n\nHOST = \"localhost\"\nPORT = 3306\nUSER = \"root\"\nPSWD = \"password\"\n\n# Pool (Context: Connected)\nasync def test_pool_context_connected() -> None:\n async with sqlcycli.create_pool(HOST, PORT, USER, PSWD, min_size=1) as pool:\n # Pool is connected: 1 free connection (min_size=1)\n assert not pool.closed() and pool.free == 1\n\n # Sync Connection - - - - - - - - - - - - - - - - - -\n with pool.acquire() as conn:\n with conn.cursor() as cur:\n cur.execute(\"SELECT 1\")\n assert cur.fetchone() == (1,)\n\n # Async Connection - - - - - - - - - - - - - - - - -\n async with pool.acquire() as conn:\n async with conn.cursor() as cur:\n await cur.execute(\"SELECT 1\")\n assert await cur.fetchone() == (1,)\n\n # Pool closed\n assert pool.closed() and pool.total == 0\n\n# Pool (Context: Disconnected)\nasync def test_pool_context_disconnected() -> None:\n with sqlcycli.create_pool(HOST, PORT, USER, PSWD, min_size=1) as pool:\n # Pool is not connected: 0 free connection (min_size=1)\n assert pool.closed() and pool.free == 0\n\n # Sync Connection - - - - - - - - - - - - - - - - - -\n with pool.acquire() as conn:\n with conn.cursor() as cur:\n cur.execute(\"SELECT 1\")\n assert cur.fetchone() == (1,)\n\n # Async Connection - - - - - - - - - - - - - - - - -\n async with pool.acquire() as conn:\n async with conn.cursor() as cur:\n await cur.execute(\"SELECT 1\")\n assert await cur.fetchone() == (1,)\n # 1 free async connection\n assert pool.free == 1\n\n # Pool closed\n assert pool.closed() and pool.total == 0\n\nif __name__ == \"__main__\":\n asyncio.run(test_pool_context_connected())\n asyncio.run(test_pool_context_disconnected())\n```\n\n### Use the `Pool` class to create a Pool instance. `Must close manually`.\n\n```python\nimport asyncio\nimport sqlcycli\n\nHOST = \"localhost\"\nPORT = 3306\nUSER = \"root\"\nPSWD = \"password\"\n\n# Pool (Instance: Connected)\nasync def test_pool_instance_connected() -> None:\n pool = await sqlcycli.create_pool(HOST, PORT, USER, PSWD, min_size=1)\n # Pool is connected: 1 free connection (min_size=1)\n assert not pool.closed() and pool.free == 1\n\n # Sync Connection - - - - - - - - - - - - - - - - - -\n with pool.acquire() as conn:\n with conn.cursor() as cur:\n cur.execute(\"SELECT 1\")\n assert cur.fetchone() == (1,)\n\n # Async Connection - - - - - - - - - - - - - - - - -\n async with pool.acquire() as conn:\n async with conn.cursor() as cur:\n await cur.execute(\"SELECT 1\")\n assert await cur.fetchone() == (1,)\n\n # Close pool manually\n await pool.close()\n assert pool.closed() and pool.total == 0\n\n\n# Pool (Instance: Disconnected)\nasync def test_pool_instance_disconnected() -> None:\n pool = sqlcycli.Pool(HOST, PORT, USER, PSWD, min_size=1)\n # Pool is not connected: 0 free connection (min_size=1)\n assert pool.closed() and pool.free == 0\n\n # Sync Connection - - - - - - - - - - - - - - - - - -\n with pool.acquire() as conn:\n with conn.cursor() as cur:\n cur.execute(\"SELECT 1\")\n assert cur.fetchone() == (1,)\n\n # Async Connection - - - - - - - - - - - - - - - - -\n async with pool.acquire() as conn:\n async with conn.cursor() as cur:\n await cur.execute(\"SELECT 1\")\n assert await cur.fetchone() == (1,)\n # 1 free async connection\n assert pool.free == 1\n\n # Close pool manually\n await pool.close()\n assert pool.closed() and pool.total == 0\n\nif __name__ == \"__main__\":\n asyncio.run(test_pool_instance_connected())\n asyncio.run(test_pool_instance_disconnected())\n```\n\n### Use the `sqlfunc` module to escape values for MySQL functions.\n\n```python\nimport asyncio\nimport datetime\nimport sqlcycli\nfrom sqlcycli import sqlfunc\n\nHOST = \"localhost\"\nPORT = 3306\nUSER = \"root\"\nPSWD = \"Password_123456\"\n\n# SQLFunction\ndef test_sqlfunction() -> None:\n with sqlcycli.connect(HOST, PORT, USER, PSWD) as conn:\n with conn.cursor() as cur:\n cur.execute(\"SELECT %s\", sqlfunc.TO_DAYS(datetime.date(2007, 10, 7)))\n # SQLFunction 'TO_DAYS()' escaped as: TO_DAYS('2007-10-07')\n assert cur.executed_sql == \"SELECT TO_DAYS('2007-10-07')\"\n assert cur.fetchone() == (733321,)\n\n # Connection closed\n assert conn.closed()\n\nif __name__ == \"__main__\":\n test_sqlfunction()\n```\n\n## Acknowledgements\n\nSQLCyCli is build on top of the following open-source repositories:\n\n- [aiomysql](https://github.com/aio-libs/aiomysql)\n- [PyMySQL](https://github.com/PyMySQL/PyMySQL)\n\nSQLCyCli is based on the following open-source repositories:\n\n- [numpy](https://github.com/numpy/numpy)\n- [orjson](https://github.com/ijl/orjson)\n- [pandas](https://github.com/pandas-dev/pandas)\n",
"bugtrack_url": null,
"license": "MIT license",
"summary": "Fast MySQL driver build in Cython (Sync and Async).",
"version": "1.5.2",
"project_urls": {
"Homepage": "https://github.com/AresJef/SQLCyCli"
},
"split_keywords": [
"mysql",
" mariadb",
" pymysql",
" aiomysql",
" cython",
" asyncio"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "e7f5bfbb002019a3860718c936fc4754fae47c9c8069a9a6115aefeba7ad8e4c",
"md5": "d5325590e3c68c677808e0302f1dde07",
"sha256": "8a6c9aef978dec04e75720ce99debb1856315d9c54af1d60ef25f885245a4c4a"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp310-cp310-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "d5325590e3c68c677808e0302f1dde07",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 9252502,
"upload_time": "2025-09-18T13:35:41",
"upload_time_iso_8601": "2025-09-18T13:35:41.505134Z",
"url": "https://files.pythonhosted.org/packages/e7/f5/bfbb002019a3860718c936fc4754fae47c9c8069a9a6115aefeba7ad8e4c/sqlcycli-1.5.2-cp310-cp310-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e8b362538baeb8d497bf5ee48c8918c8c92bb0e1438f7246e621eb21d44a53ce",
"md5": "311b518f87455525d674aba6b5665b36",
"sha256": "4495611b407c86aa299a8647d2a734b49a206227c6dba5e0a84d19e390ca470f"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "311b518f87455525d674aba6b5665b36",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 6651113,
"upload_time": "2025-09-18T13:35:43",
"upload_time_iso_8601": "2025-09-18T13:35:43.675024Z",
"url": "https://files.pythonhosted.org/packages/e8/b3/62538baeb8d497bf5ee48c8918c8c92bb0e1438f7246e621eb21d44a53ce/sqlcycli-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9887f780a642cf5dbc27774f3ed33bd52f16c079cfe6f0da1a5c6624b31ddab9",
"md5": "7653c347cd2573290ef57de6a1435bd2",
"sha256": "e838468b91b5f07c1431f785222cabc9e2ac35d0717dc7a4c03ab008ea13b90d"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "7653c347cd2573290ef57de6a1435bd2",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 6405646,
"upload_time": "2025-09-18T13:35:46",
"upload_time_iso_8601": "2025-09-18T13:35:46.083521Z",
"url": "https://files.pythonhosted.org/packages/98/87/f780a642cf5dbc27774f3ed33bd52f16c079cfe6f0da1a5c6624b31ddab9/sqlcycli-1.5.2-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ebbae1717185f0406cc54c775c8053b46199af20a0a501454577c13e810942e3",
"md5": "76a188bb329d95eb83084af0e0d3b68e",
"sha256": "5340d6636bf77822e2bd4d54aa896901d53786dcd9480340bba83ecb92dc42e0"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "76a188bb329d95eb83084af0e0d3b68e",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 20770449,
"upload_time": "2025-09-18T13:35:48",
"upload_time_iso_8601": "2025-09-18T13:35:48.294750Z",
"url": "https://files.pythonhosted.org/packages/eb/ba/e1717185f0406cc54c775c8053b46199af20a0a501454577c13e810942e3/sqlcycli-1.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8d0fc8a3b9ad75f396cfa99e5ad978dcaf11528c46fc590e66ce11eea3a59ada",
"md5": "84ca735a78726ed116ad0c1f8e9546f8",
"sha256": "6a9395e3af5545bda26e8f2657397316b5e553d19498510ec0e74f40266651d7"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp310-cp310-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "84ca735a78726ed116ad0c1f8e9546f8",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 18414311,
"upload_time": "2025-09-18T13:35:50",
"upload_time_iso_8601": "2025-09-18T13:35:50.869042Z",
"url": "https://files.pythonhosted.org/packages/8d/0f/c8a3b9ad75f396cfa99e5ad978dcaf11528c46fc590e66ce11eea3a59ada/sqlcycli-1.5.2-cp310-cp310-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d5752b8e38df3d3b336d20028e3d14aeaca60ccdfae9da1f7a0234089c5f0e0f",
"md5": "6d6494d2e9e7dd49b0b57bdaf655a24e",
"sha256": "a6310db78e0a514ee90ebdd25372cd139003bc1d0a0c5783a02eb88c0a04b585"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "6d6494d2e9e7dd49b0b57bdaf655a24e",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 6137957,
"upload_time": "2025-09-18T13:35:53",
"upload_time_iso_8601": "2025-09-18T13:35:53.572061Z",
"url": "https://files.pythonhosted.org/packages/d5/75/2b8e38df3d3b336d20028e3d14aeaca60ccdfae9da1f7a0234089c5f0e0f/sqlcycli-1.5.2-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "48eac028e793f3a2b91d3321e870763bbe7b43205c36bbc642957ab59e23c866",
"md5": "ba91aa15b4dcecce046ef362d6a6eac8",
"sha256": "9874efbdf228df19e28607340dd97d2d0e5c10dc0923eeac7816fdfbd339f85d"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp311-cp311-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "ba91aa15b4dcecce046ef362d6a6eac8",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 9274993,
"upload_time": "2025-09-18T13:35:55",
"upload_time_iso_8601": "2025-09-18T13:35:55.004700Z",
"url": "https://files.pythonhosted.org/packages/48/ea/c028e793f3a2b91d3321e870763bbe7b43205c36bbc642957ab59e23c866/sqlcycli-1.5.2-cp311-cp311-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8edf721e4e96b6496047dd5739b62718ba68f2617034a24dd5a898faf7bf1a98",
"md5": "92db1fb79b955fc80e8bc99499b8620c",
"sha256": "7cc6a499803bedfaafb0a180bb035eb297b1fbc1556cada284fc9125d222d9bf"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "92db1fb79b955fc80e8bc99499b8620c",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 6656740,
"upload_time": "2025-09-18T13:35:56",
"upload_time_iso_8601": "2025-09-18T13:35:56.958881Z",
"url": "https://files.pythonhosted.org/packages/8e/df/721e4e96b6496047dd5739b62718ba68f2617034a24dd5a898faf7bf1a98/sqlcycli-1.5.2-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "77b657d3841980476cc49e1ae753474ade700ed14e3fbb9c20fead8bd1f5f1ef",
"md5": "19d6a4cc7b3b18b9ea7fc3792477443f",
"sha256": "d43acde31c9b1abe1f8f99e0d7c6baa3caf39b37e3af63daba89f627f32a0e4c"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "19d6a4cc7b3b18b9ea7fc3792477443f",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 6424034,
"upload_time": "2025-09-18T13:35:58",
"upload_time_iso_8601": "2025-09-18T13:35:58.361388Z",
"url": "https://files.pythonhosted.org/packages/77/b6/57d3841980476cc49e1ae753474ade700ed14e3fbb9c20fead8bd1f5f1ef/sqlcycli-1.5.2-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5817015ef668bb8066e86e7daa520ae927f1080284b5c1b66311c1d23118d224",
"md5": "389684865a40d578085fc64ebd038b19",
"sha256": "a46225e31694a0f9168386d92e07b7d3587de762be35dffb1fff1eba8ce9db0c"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "389684865a40d578085fc64ebd038b19",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 22898072,
"upload_time": "2025-09-18T13:36:00",
"upload_time_iso_8601": "2025-09-18T13:36:00.771593Z",
"url": "https://files.pythonhosted.org/packages/58/17/015ef668bb8066e86e7daa520ae927f1080284b5c1b66311c1d23118d224/sqlcycli-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bf7351f90199e1c7ef6ddfe5ede41d3b85d425230f0b476c0d4f0fde74501341",
"md5": "75c53a84bd1d51d291661186289eb4c1",
"sha256": "05412ba2e2b672c18d7ddcbdc774f41172672fb168a8861c37f6551266adf430"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp311-cp311-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "75c53a84bd1d51d291661186289eb4c1",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 20319541,
"upload_time": "2025-09-18T13:36:03",
"upload_time_iso_8601": "2025-09-18T13:36:03.171237Z",
"url": "https://files.pythonhosted.org/packages/bf/73/51f90199e1c7ef6ddfe5ede41d3b85d425230f0b476c0d4f0fde74501341/sqlcycli-1.5.2-cp311-cp311-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7c981f6c359e055cb0c9b6aaeb71f976532c21b085dbf5e2575c3d221b90d76f",
"md5": "9a8540da265c3e2dc992558838b31263",
"sha256": "d1447f8e011223b5ce0515d3f75250e0260ffffdbf5f7435237ff6bcef1b5a2c"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "9a8540da265c3e2dc992558838b31263",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 6143624,
"upload_time": "2025-09-18T13:36:05",
"upload_time_iso_8601": "2025-09-18T13:36:05.165636Z",
"url": "https://files.pythonhosted.org/packages/7c/98/1f6c359e055cb0c9b6aaeb71f976532c21b085dbf5e2575c3d221b90d76f/sqlcycli-1.5.2-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "31a60467b2b8f64eb536666e400aed29b0e5e26b527b876926ade8baff79cb11",
"md5": "9fb0f50a401af37b9684033b5412ad3e",
"sha256": "d97e2d825054ad099c46c91140a5b31437c96ed4c6f1b2a8300a8db33248a1c9"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp312-cp312-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "9fb0f50a401af37b9684033b5412ad3e",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 9286790,
"upload_time": "2025-09-18T13:36:07",
"upload_time_iso_8601": "2025-09-18T13:36:07.010428Z",
"url": "https://files.pythonhosted.org/packages/31/a6/0467b2b8f64eb536666e400aed29b0e5e26b527b876926ade8baff79cb11/sqlcycli-1.5.2-cp312-cp312-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d93c5db810cfd31753064645dbb6023100c8e093e8da3c8b2496d9f8d885ad82",
"md5": "81b3dde938ed5e461e7bf171e6599316",
"sha256": "64597f41aae32831bb75ff406381d8d73a2a5d48415da82dcdb7671d4263c2e6"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp312-cp312-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "81b3dde938ed5e461e7bf171e6599316",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 6647779,
"upload_time": "2025-09-18T13:36:08",
"upload_time_iso_8601": "2025-09-18T13:36:08.865450Z",
"url": "https://files.pythonhosted.org/packages/d9/3c/5db810cfd31753064645dbb6023100c8e093e8da3c8b2496d9f8d885ad82/sqlcycli-1.5.2-cp312-cp312-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e98253d13d833e84aa594557ff6813bcac3adf476317cb2dc58a4a1c77a37714",
"md5": "bb9f76c4338d29a52443a52f8a96c389",
"sha256": "bd51605dc6f19d96782844224963c4e3ed28d5ef32c3d254f0c8969f356db00f"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "bb9f76c4338d29a52443a52f8a96c389",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 6445397,
"upload_time": "2025-09-18T13:36:10",
"upload_time_iso_8601": "2025-09-18T13:36:10.646487Z",
"url": "https://files.pythonhosted.org/packages/e9/82/53d13d833e84aa594557ff6813bcac3adf476317cb2dc58a4a1c77a37714/sqlcycli-1.5.2-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "df60b29af0a24fae2610ff748fa8e8acede5de8d01d1d7b6db6596cf951f88c7",
"md5": "4c4b70b0858a4799e2da26df58876507",
"sha256": "f0d081e069a489cb62cff1ebeabeb73fffb21cbbec39091c1077b16d202fe405"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "4c4b70b0858a4799e2da26df58876507",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 22637548,
"upload_time": "2025-09-18T13:36:12",
"upload_time_iso_8601": "2025-09-18T13:36:12.787960Z",
"url": "https://files.pythonhosted.org/packages/df/60/b29af0a24fae2610ff748fa8e8acede5de8d01d1d7b6db6596cf951f88c7/sqlcycli-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d140073f26acd65945a6806c328770bbd053204822eaa50f429f17aca4e2d949",
"md5": "78c67a71791452fe1010e97615144222",
"sha256": "44f4885691b8147e502418447a7307ea9bc7c23534da3ea1182389a62d1303c0"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp312-cp312-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "78c67a71791452fe1010e97615144222",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 20454615,
"upload_time": "2025-09-18T13:36:15",
"upload_time_iso_8601": "2025-09-18T13:36:15.197525Z",
"url": "https://files.pythonhosted.org/packages/d1/40/073f26acd65945a6806c328770bbd053204822eaa50f429f17aca4e2d949/sqlcycli-1.5.2-cp312-cp312-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "831d343b68d8df7d4b1087152d0072f86d8c69f9659e0bebb7d529aa131d819a",
"md5": "0784f6ecb547d5b5ce512ed83ea70ed4",
"sha256": "6b42d436c0140361fa7e4003562d665085e78f98a6c9bffec31912fb822042fe"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "0784f6ecb547d5b5ce512ed83ea70ed4",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 6046218,
"upload_time": "2025-09-18T13:36:17",
"upload_time_iso_8601": "2025-09-18T13:36:17.171501Z",
"url": "https://files.pythonhosted.org/packages/83/1d/343b68d8df7d4b1087152d0072f86d8c69f9659e0bebb7d529aa131d819a/sqlcycli-1.5.2-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "eac573cd641e2daf56b6bb2d838cc622c4ce83ffd1528a9fa4b323828e066f10",
"md5": "be4df09adb0efa6426946af5d9f1c1b2",
"sha256": "fa4f3f0cdbbf2ee7ae7737727f2a43415099bf162350fefbf604c9b5a1051a41"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp313-cp313-macosx_10_13_universal2.whl",
"has_sig": false,
"md5_digest": "be4df09adb0efa6426946af5d9f1c1b2",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 9193017,
"upload_time": "2025-09-18T13:36:18",
"upload_time_iso_8601": "2025-09-18T13:36:18.732437Z",
"url": "https://files.pythonhosted.org/packages/ea/c5/73cd641e2daf56b6bb2d838cc622c4ce83ffd1528a9fa4b323828e066f10/sqlcycli-1.5.2-cp313-cp313-macosx_10_13_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2a997fb11f94398af6350df4a1621dd7df6c0d44f59724acbf6185761522a9e8",
"md5": "ca55a82a1a1913bb0ee3272ca11fc9b2",
"sha256": "c17bf9a475e070a1fdb19e9cac85a07dd4297ec5f48d750690db12bc91409660"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "ca55a82a1a1913bb0ee3272ca11fc9b2",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 6597356,
"upload_time": "2025-09-18T13:36:20",
"upload_time_iso_8601": "2025-09-18T13:36:20.529307Z",
"url": "https://files.pythonhosted.org/packages/2a/99/7fb11f94398af6350df4a1621dd7df6c0d44f59724acbf6185761522a9e8/sqlcycli-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e80de8de9aa52292903c256fbbd2de2548ded2b8989708acb1086e28eea38ee3",
"md5": "7f5944f60b1a5c3af0487cf9023f7e60",
"sha256": "59a96b632744237cd3cda730fe58fe35eeb4ffedf4429811d044aea9e1efaf39"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "7f5944f60b1a5c3af0487cf9023f7e60",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 6399654,
"upload_time": "2025-09-18T13:36:21",
"upload_time_iso_8601": "2025-09-18T13:36:21.952531Z",
"url": "https://files.pythonhosted.org/packages/e8/0d/e8de9aa52292903c256fbbd2de2548ded2b8989708acb1086e28eea38ee3/sqlcycli-1.5.2-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "64e22ed269c434f05914abc99b1c8e84c516d494250fa59eaf4a64fcb545c2bc",
"md5": "97bafb14218b5643422b513190ec43fb",
"sha256": "a3183dbf89646edc909b697fbd006b8907d4563c005ba06a2f30370b870781b7"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "97bafb14218b5643422b513190ec43fb",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 22592362,
"upload_time": "2025-09-18T13:36:24",
"upload_time_iso_8601": "2025-09-18T13:36:24.179890Z",
"url": "https://files.pythonhosted.org/packages/64/e2/2ed269c434f05914abc99b1c8e84c516d494250fa59eaf4a64fcb545c2bc/sqlcycli-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6d8a12554962d42086fd8dd3f496f5af3ee6ef8ded51ab0960397deee31b1062",
"md5": "22f2ed02c953f71a3c13dd5ab5c6b255",
"sha256": "a05d4f55051ae4ac9ee9fcb80b1efe96461bf0a58f5757b4fb379c7daa91903d"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp313-cp313-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "22f2ed02c953f71a3c13dd5ab5c6b255",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 20446371,
"upload_time": "2025-09-18T13:36:26",
"upload_time_iso_8601": "2025-09-18T13:36:26.858634Z",
"url": "https://files.pythonhosted.org/packages/6d/8a/12554962d42086fd8dd3f496f5af3ee6ef8ded51ab0960397deee31b1062/sqlcycli-1.5.2-cp313-cp313-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "928ed5a68c8abcca8c2a547bd02a2ba1e282e583b0c4a8b07a6ef561d695de6e",
"md5": "0f7e51f5f5afea771d90e34049a46b86",
"sha256": "1bd40728392396a42dd407aae7494305af65ed470bd76412e26a7d94ccc58f73"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "0f7e51f5f5afea771d90e34049a46b86",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 6033982,
"upload_time": "2025-09-18T13:36:29",
"upload_time_iso_8601": "2025-09-18T13:36:29.309436Z",
"url": "https://files.pythonhosted.org/packages/92/8e/d5a68c8abcca8c2a547bd02a2ba1e282e583b0c4a8b07a6ef561d695de6e/sqlcycli-1.5.2-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3640394ba62f7c7f5cdd2599cf824e10276253e9ae07e94727b92accc114d20c",
"md5": "a23b17f4729a7ff9fab209943323f77e",
"sha256": "67b130464344c32a3481475d7122ce4c52ed1aff5fe3f8f4e2e843fb45401d3d"
},
"downloads": -1,
"filename": "sqlcycli-1.5.2.tar.gz",
"has_sig": false,
"md5_digest": "a23b17f4729a7ff9fab209943323f77e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 3644291,
"upload_time": "2025-09-18T13:36:30",
"upload_time_iso_8601": "2025-09-18T13:36:30.753316Z",
"url": "https://files.pythonhosted.org/packages/36/40/394ba62f7c7f5cdd2599cf824e10276253e9ae07e94727b92accc114d20c/sqlcycli-1.5.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-18 13:36:30",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "AresJef",
"github_project": "SQLCyCli",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "numpy",
"specs": [
[
">=",
"1.25.2"
]
]
},
{
"name": "orjson",
"specs": [
[
">=",
"3.10.2"
]
]
},
{
"name": "pandas",
"specs": [
[
">=",
"2.1.0"
]
]
},
{
"name": "typing-extensions",
"specs": [
[
">=",
"4.9.0"
]
]
}
],
"lcname": "sqlcycli"
}