<h1 align="center"> Alchemynger </h1>
<h3 align="center"> SQLAlchemy Connection Manager </h3>
<p align="center">
<img alt="Python" src="https://img.shields.io/badge/python-3.8_|_3.9_|_3.10_|_3.11-blue" />
</p>
<p align="center">
<img alt="Python" src="https://img.shields.io/badge/python-3670A0?style=for-the-badge&logo=python&logoColor=ffdd54" />
<img alt="Зostgres" src="https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge&logo=postgresql&logoColor=white" />
<img alt="SQLite" src="https://img.shields.io/badge/sqlite-%2307405e.svg?style=for-the-badge&logo=sqlite&logoColor=white" />
<img alt="Flask" src="https://img.shields.io/badge/flask-%23000.svg?style=for-the-badge&logo=flask&logoColor=white" />
<img alt="MySQL" src="https://img.shields.io/badge/mysql-%2300f.svg?style=for-the-badge&logo=mysql&logoColor=white" />
<img alt="FastAPI" src="https://img.shields.io/badge/FastAPI-005571?style=for-the-badge&logo=fastapi" />
<img alt="Flask" src="https://img.shields.io/badge/flask-%23000.svg?style=for-the-badge&logo=flask&logoColor=white" />
</p>
Alchemynger is a versatile Python library that simplifies database connectivity and interaction using SQLAlchemy. It offers both synchronous and asynchronous database management for applications that require efficient database operations.
## Installation
You can install Alchemynger using pip:
```bash
pip install alchemynger
```
## Usage
### SyncManager: Synchronous Database Operations
SyncManager is designed for traditional synchronous applications. Here's how to use it:
```python
from alchemynger import SyncManager
from alchemynger.sqlalchemy import Column, String
# Create a SyncManager instance
manager = SyncManager('sqlite:///path/to/db')
# Define your SQLAlchemy model class
class User(manager.Base):
__tablename__ = 'user'
name = Column(String(30), primary_key=True)
# Connect to the database
manager.connect()
# Create an insert statement and execute it
stmt = manager[User].insert.values(name='username')
manager.execute(stmt, commit=True) # or manager(stmt, commit=True)
```
### AsyncManager: Asynchronous Database Operations
AsyncManager is tailored for asyncio-based applications. Here's how to use it:
```python
from asyncio import run
from alchemynger import AsyncManager
from alchemynger.sqlalchemy import Column, String
# Create an AsyncManager instance
manager = AsyncManager('sqlite+aiosqlite:///path/to/db')
# Define your SQLAlchemy model class
class User(manager.Base):
__tablename__ = 'user'
name = Column(String(30), primary_key=True)
# Define an async main function
async def main():
await manager.connect()
stmt = manager[User].insert.values(name='username')
await manager.execute(stmt, commit=True) # or await manager(stmt, commit=True)
if __name__ == "__main__":
run(main())
```
### Selector: Useage
Selectors can be used with Columns, a Column, or the Table Model.
```python
# Create a select statements with column or columns
manager[User.name].select
manager[User.name, User.any_col].select
```
```python
# Create statements with model
manager[User].select
manager[User].delete
manager[User].insert
manager[User].update
```
then execute
```python
# execute statement
manager.execute(stmt, scalars=False)
```
## Native use of SQLAlchemy queries
You can also utilize the standard query-writing methods provided by SQLAlchemy, for example, if you find that the library's functionality is insufficient for your needs. Just user `from sqlalchemy import select, insert, ...` or import from `from alchemynger.sqlalchemy import select, insert`
```python
from alchemynger import SyncManager
from alchemynger.sqlalchemy import select, insert, Column
# Create a SyncManager instance
manager = SyncManager('sqlite:///path/to/db')
# Define your SQLAlchemy model class
class User(manager.Base):
__tablename__ = 'user'
name = Column(String(30), primary_key=True)
# Connect to the database
manager.connect()
# Create a select statement and execute it
stmt = select(User).where(User.id > 5)
manager.execute(stmt)
# Create an insert statement and execute it
stmt = insert(User).values(name="Lex")
manager.execute(stmt, commit=True) # or manager(stmt, commit=True)
```
### Context Managers and Error Handling
Both SyncManager and AsyncManager provide context managers for managing database sessions. This ensures that sessions are properly closed, even in the event of an exception.
```python
# Example using a context manager
with manager.get_session() as session:
stmt = manager[User].select
result = session.execute(stmt)
# Use the result
```
## Contribution
Contributions to Alchemynger are welcome! If you have ideas for improvements, bug fixes, or new features, please open an issue or submit a pull request on the [GitHub repository](https://github.com/Resheba/Alchemynger).
## License
Alchemynger is licensed under the MIT License. See the [LICENSE](https://github.com/Resheba/Alchemynger/blob/main/LICENSE) file for more details.
Raw data
{
"_id": null,
"home_page": "https://github.com/Resheba/Alchemynger",
"name": "Alchemynger",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "",
"keywords": "sqlalchemy",
"author": "Resheba",
"author_email": "Resheba <c90de11@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/d0/34/fdb6b54474e8c2872ab6c93e9a5bc35c000ec2cf19fe03f405be66f6d2ce/Alchemynger-0.1.5.3.tar.gz",
"platform": null,
"description": "<h1 align=\"center\"> Alchemynger </h1> \r\n<h3 align=\"center\"> SQLAlchemy Connection Manager </h3>\r\n\r\n<p align=\"center\">\r\n <img alt=\"Python\" src=\"https://img.shields.io/badge/python-3.8_|_3.9_|_3.10_|_3.11-blue\" />\r\n</p>\r\n<p align=\"center\">\r\n <img alt=\"Python\" src=\"https://img.shields.io/badge/python-3670A0?style=for-the-badge&logo=python&logoColor=ffdd54\" />\r\n <img alt=\"\u0417ostgres\" src=\"https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge&logo=postgresql&logoColor=white\" />\r\n <img alt=\"SQLite\" src=\"https://img.shields.io/badge/sqlite-%2307405e.svg?style=for-the-badge&logo=sqlite&logoColor=white\" />\r\n <img alt=\"Flask\" src=\"https://img.shields.io/badge/flask-%23000.svg?style=for-the-badge&logo=flask&logoColor=white\" />\r\n <img alt=\"MySQL\" src=\"https://img.shields.io/badge/mysql-%2300f.svg?style=for-the-badge&logo=mysql&logoColor=white\" /> \r\n <img alt=\"FastAPI\" src=\"https://img.shields.io/badge/FastAPI-005571?style=for-the-badge&logo=fastapi\" />\r\n <img alt=\"Flask\" src=\"https://img.shields.io/badge/flask-%23000.svg?style=for-the-badge&logo=flask&logoColor=white\" />\r\n</p>\r\n\r\n\r\nAlchemynger is a versatile Python library that simplifies database connectivity and interaction using SQLAlchemy. It offers both synchronous and asynchronous database management for applications that require efficient database operations. \r\n\r\n\r\n## Installation\r\n\r\nYou can install Alchemynger using pip:\r\n\r\n```bash\r\npip install alchemynger\r\n```\r\n\r\n## Usage\r\n\r\n### SyncManager: Synchronous Database Operations\r\n\r\nSyncManager is designed for traditional synchronous applications. Here's how to use it:\r\n\r\n```python\r\nfrom alchemynger import SyncManager\r\nfrom alchemynger.sqlalchemy import Column, String\r\n\r\n# Create a SyncManager instance\r\nmanager = SyncManager('sqlite:///path/to/db')\r\n\r\n# Define your SQLAlchemy model class\r\nclass User(manager.Base):\r\n __tablename__ = 'user'\r\n name = Column(String(30), primary_key=True)\r\n\r\n# Connect to the database\r\nmanager.connect()\r\n\r\n# Create an insert statement and execute it\r\nstmt = manager[User].insert.values(name='username')\r\n\r\nmanager.execute(stmt, commit=True) # or manager(stmt, commit=True)\r\n```\r\n\r\n### AsyncManager: Asynchronous Database Operations\r\n\r\nAsyncManager is tailored for asyncio-based applications. Here's how to use it:\r\n\r\n```python\r\nfrom asyncio import run\r\nfrom alchemynger import AsyncManager\r\nfrom alchemynger.sqlalchemy import Column, String\r\n\r\n# Create an AsyncManager instance\r\nmanager = AsyncManager('sqlite+aiosqlite:///path/to/db')\r\n\r\n# Define your SQLAlchemy model class\r\nclass User(manager.Base):\r\n __tablename__ = 'user'\r\n name = Column(String(30), primary_key=True)\r\n\r\n# Define an async main function\r\nasync def main():\r\n await manager.connect()\r\n \r\n stmt = manager[User].insert.values(name='username')\r\n\r\n await manager.execute(stmt, commit=True) # or await manager(stmt, commit=True)\r\n\r\nif __name__ == \"__main__\":\r\n run(main())\r\n```\r\n\r\n### Selector: Useage\r\n\r\nSelectors can be used with Columns, a Column, or the Table Model.\r\n\r\n```python\r\n# Create a select statements with column or columns\r\nmanager[User.name].select\r\nmanager[User.name, User.any_col].select\r\n```\r\n\r\n```python\r\n# Create statements with model\r\nmanager[User].select\r\nmanager[User].delete\r\nmanager[User].insert\r\nmanager[User].update\r\n```\r\nthen execute\r\n```python\r\n# execute statement\r\nmanager.execute(stmt, scalars=False)\r\n```\r\n\r\n## Native use of SQLAlchemy queries\r\nYou can also utilize the standard query-writing methods provided by SQLAlchemy, for example, if you find that the library's functionality is insufficient for your needs. Just user `from sqlalchemy import select, insert, ...` or import from `from alchemynger.sqlalchemy import select, insert`\r\n\r\n```python\r\nfrom alchemynger import SyncManager\r\nfrom alchemynger.sqlalchemy import select, insert, Column\r\n\r\n# Create a SyncManager instance\r\nmanager = SyncManager('sqlite:///path/to/db')\r\n\r\n# Define your SQLAlchemy model class\r\nclass User(manager.Base):\r\n __tablename__ = 'user'\r\n name = Column(String(30), primary_key=True)\r\n\r\n# Connect to the database\r\nmanager.connect()\r\n\r\n# Create a select statement and execute it\r\n\r\nstmt = select(User).where(User.id > 5)\r\n\r\nmanager.execute(stmt)\r\n\r\n# Create an insert statement and execute it\r\nstmt = insert(User).values(name=\"Lex\")\r\n\r\nmanager.execute(stmt, commit=True) # or manager(stmt, commit=True)\r\n```\r\n\r\n### Context Managers and Error Handling\r\n\r\nBoth SyncManager and AsyncManager provide context managers for managing database sessions. This ensures that sessions are properly closed, even in the event of an exception.\r\n\r\n```python\r\n# Example using a context manager\r\nwith manager.get_session() as session:\r\n stmt = manager[User].select\r\n\r\n result = session.execute(stmt)\r\n # Use the result\r\n```\r\n\r\n## Contribution\r\n\r\nContributions to Alchemynger are welcome! If you have ideas for improvements, bug fixes, or new features, please open an issue or submit a pull request on the [GitHub repository](https://github.com/Resheba/Alchemynger).\r\n\r\n## License\r\n\r\nAlchemynger is licensed under the MIT License. See the [LICENSE](https://github.com/Resheba/Alchemynger/blob/main/LICENSE) file for more details.\r\n",
"bugtrack_url": null,
"license": "",
"summary": "Simple SQLAlchemy connector manager.",
"version": "0.1.5.3",
"project_urls": {
"Homepage": "https://github.com/Resheba/Alchemynger"
},
"split_keywords": [
"sqlalchemy"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "d034fdb6b54474e8c2872ab6c93e9a5bc35c000ec2cf19fe03f405be66f6d2ce",
"md5": "e385222e1443937a8ad4ce752b594892",
"sha256": "2670362ae7191b6208f16691e8609766abf5b22d710da32c558cd2be4e272ada"
},
"downloads": -1,
"filename": "Alchemynger-0.1.5.3.tar.gz",
"has_sig": false,
"md5_digest": "e385222e1443937a8ad4ce752b594892",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 7738,
"upload_time": "2024-02-14T16:14:19",
"upload_time_iso_8601": "2024-02-14T16:14:19.573822Z",
"url": "https://files.pythonhosted.org/packages/d0/34/fdb6b54474e8c2872ab6c93e9a5bc35c000ec2cf19fe03f405be66f6d2ce/Alchemynger-0.1.5.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-02-14 16:14:19",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Resheba",
"github_project": "Alchemynger",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "alchemynger"
}