async-sqlalchemy-adapter
====
[](https://github.com/officialpycasbin/async-sqlalchemy-adapter/actions/workflows/build.yml)
[](https://coveralls.io/github/officialpycasbin/async-sqlalchemy-adapter)
[](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)
[](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)
[](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)
[](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)
[](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)
Asynchronous SQLAlchemy Adapter is the [SQLAlchemy](https://www.sqlalchemy.org) adapter for [PyCasbin](https://github.com/casbin/pycasbin). With this library, Casbin can load policy from SQLAlchemy supported database or save policy to it.
Based on [Officially Supported Databases](http://www.sqlalchemy.org/), The current supported databases are:
- PostgreSQL
- MySQL
- MariaDB
- SQLite
- Oracle
- Microsoft SQL Server
- Firebird
## Installation
```
pip install casbin_async_sqlalchemy_adapter
```
## Simple Example
```python
import casbin_async_sqlalchemy_adapter
import casbin
adapter = casbin_async_sqlalchemy_adapter.Adapter('sqlite+aiosqlite:///test.db')
# or mysql example
# adapter = casbin_async_sqlalchemy_adapter.Adapter('mysql+aiomysql://user:pwd@127.0.0.1:3306/exampledb')
e = casbin.AsyncEnforcer('path/to/model.conf', adapter)
sub = "alice" # the user that wants to access a resource.
obj = "data1" # the resource that is going to be accessed.
act = "read" # the operation that the user performs on the resource.
if e.enforce(sub, obj, act):
# permit alice to read data1
pass
else:
# deny the request, show an error
pass
```
> Note that AsyncAdaper must be used for AynscEnforcer.
## External Session Support
The adapter supports using externally managed SQLAlchemy sessions. This feature is useful for:
- Better transaction control in complex scenarios
- Reducing database connections and communications
- Supporting advanced database features like two-phase commits
- Integrating with existing database session management
### Basic Usage with External Session
```python
import casbin_async_sqlalchemy_adapter
import casbin
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.orm import sessionmaker
# Create your own database session
engine = create_async_engine('sqlite+aiosqlite:///test.db')
async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
# Create adapter with external session
session = async_session()
adapter = casbin_async_sqlalchemy_adapter.Adapter(
'sqlite+aiosqlite:///test.db',
db_session=session
)
e = casbin.AsyncEnforcer('path/to/model.conf', adapter)
# Now you have full control over the session
# The adapter will not auto-commit or auto-rollback when using external sessions
```
### Transaction Control Example
```python
# Example: Manual transaction control
async with async_session() as session:
adapter = casbin_async_sqlalchemy_adapter.Adapter(
'sqlite+aiosqlite:///test.db',
db_session=session
)
e = casbin.AsyncEnforcer('path/to/model.conf', adapter)
# Add multiple policies in a single transaction
await e.add_policy("alice", "data1", "read")
await e.add_policy("bob", "data2", "write")
# Commit or rollback as needed
await session.commit()
```
### Batch Operations Example
```python
# Example: Efficient batch operations
async with async_session() as session:
adapter = casbin_async_sqlalchemy_adapter.Adapter(
'sqlite+aiosqlite:///test.db',
db_session=session
)
e = casbin.AsyncEnforcer('path/to/model.conf', adapter)
# Batch add multiple policies efficiently
policies = [
["alice", "data1", "read"],
["bob", "data2", "write"],
["carol", "data3", "read"]
]
await e.add_policies(policies)
# Commit the transaction
await session.commit()
```
### Getting Help
- [PyCasbin](https://github.com/casbin/pycasbin)
### License
This project is licensed under the [Apache 2.0 license](LICENSE).
Raw data
{
"_id": null,
"home_page": "https://github.com/officialpycasbin/async-sqlalchemy-adapter",
"name": "casbin-async-sqlalchemy-adapter",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "asynccasbin, SQLAlchemy, casbin-adapter, rbac, access control, abac, acl, permission",
"author": "Casbin",
"author_email": "admin@casbin.org",
"download_url": "https://files.pythonhosted.org/packages/bf/81/60f0cb5dc9603b9459ae99862928ca2eb48aa38ec442555f9ca0306c350b/casbin_async_sqlalchemy_adapter-1.10.0.tar.gz",
"platform": null,
"description": "async-sqlalchemy-adapter\n====\n\n[](https://github.com/officialpycasbin/async-sqlalchemy-adapter/actions/workflows/build.yml)\n[](https://coveralls.io/github/officialpycasbin/async-sqlalchemy-adapter)\n[](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)\n[](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)\n[](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)\n[](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)\n[](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)\n\nAsynchronous SQLAlchemy Adapter is the [SQLAlchemy](https://www.sqlalchemy.org) adapter for [PyCasbin](https://github.com/casbin/pycasbin). With this library, Casbin can load policy from SQLAlchemy supported database or save policy to it.\n\nBased on [Officially Supported Databases](http://www.sqlalchemy.org/), The current supported databases are:\n\n- PostgreSQL\n- MySQL\n- MariaDB\n- SQLite\n- Oracle\n- Microsoft SQL Server\n- Firebird\n\n## Installation\n\n```\npip install casbin_async_sqlalchemy_adapter\n```\n\n## Simple Example\n\n```python\nimport casbin_async_sqlalchemy_adapter\nimport casbin\n\nadapter = casbin_async_sqlalchemy_adapter.Adapter('sqlite+aiosqlite:///test.db')\n\n# or mysql example \n# adapter = casbin_async_sqlalchemy_adapter.Adapter('mysql+aiomysql://user:pwd@127.0.0.1:3306/exampledb')\n\ne = casbin.AsyncEnforcer('path/to/model.conf', adapter)\n\nsub = \"alice\" # the user that wants to access a resource.\nobj = \"data1\" # the resource that is going to be accessed.\nact = \"read\" # the operation that the user performs on the resource.\n\nif e.enforce(sub, obj, act):\n # permit alice to read data1\n pass\nelse:\n # deny the request, show an error\n pass\n```\n\n> Note that AsyncAdaper must be used for AynscEnforcer.\n\n## External Session Support\n\nThe adapter supports using externally managed SQLAlchemy sessions. This feature is useful for:\n\n- Better transaction control in complex scenarios\n- Reducing database connections and communications\n- Supporting advanced database features like two-phase commits\n- Integrating with existing database session management\n\n### Basic Usage with External Session\n\n```python\nimport casbin_async_sqlalchemy_adapter\nimport casbin\nfrom sqlalchemy.ext.asyncio import create_async_engine, AsyncSession\nfrom sqlalchemy.orm import sessionmaker\n\n# Create your own database session\nengine = create_async_engine('sqlite+aiosqlite:///test.db')\nasync_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)\n\n# Create adapter with external session\nsession = async_session()\nadapter = casbin_async_sqlalchemy_adapter.Adapter(\n 'sqlite+aiosqlite:///test.db',\n db_session=session\n)\n\ne = casbin.AsyncEnforcer('path/to/model.conf', adapter)\n\n# Now you have full control over the session\n# The adapter will not auto-commit or auto-rollback when using external sessions\n```\n\n### Transaction Control Example\n\n```python\n# Example: Manual transaction control\nasync with async_session() as session:\n adapter = casbin_async_sqlalchemy_adapter.Adapter(\n 'sqlite+aiosqlite:///test.db',\n db_session=session\n )\n \n e = casbin.AsyncEnforcer('path/to/model.conf', adapter)\n \n # Add multiple policies in a single transaction\n await e.add_policy(\"alice\", \"data1\", \"read\")\n await e.add_policy(\"bob\", \"data2\", \"write\")\n \n # Commit or rollback as needed\n await session.commit()\n```\n\n### Batch Operations Example\n\n```python\n# Example: Efficient batch operations\nasync with async_session() as session:\n adapter = casbin_async_sqlalchemy_adapter.Adapter(\n 'sqlite+aiosqlite:///test.db',\n db_session=session\n )\n \n e = casbin.AsyncEnforcer('path/to/model.conf', adapter)\n \n # Batch add multiple policies efficiently\n policies = [\n [\"alice\", \"data1\", \"read\"],\n [\"bob\", \"data2\", \"write\"],\n [\"carol\", \"data3\", \"read\"]\n ]\n await e.add_policies(policies)\n \n # Commit the transaction\n await session.commit()\n```\n\n\n### Getting Help\n\n- [PyCasbin](https://github.com/casbin/pycasbin)\n\n### License\n\nThis project is licensed under the [Apache 2.0 license](LICENSE).\n",
"bugtrack_url": null,
"license": "Apache 2.0",
"summary": "Asynchronous SQLAlchemy Adapter for PyCasbin",
"version": "1.10.0",
"project_urls": {
"Homepage": "https://github.com/officialpycasbin/async-sqlalchemy-adapter"
},
"split_keywords": [
"asynccasbin",
" sqlalchemy",
" casbin-adapter",
" rbac",
" access control",
" abac",
" acl",
" permission"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "c2abb31e7649a09a6f2df0a33df26ba7e71668c3e6e3f081ca67b977669f6241",
"md5": "8e4efb44718946198b1359b341f3fe4d",
"sha256": "5f6cf981ffa09ce56233e1bc169aeaba26b5d120f6d2270dcf74de229d0f74fc"
},
"downloads": -1,
"filename": "casbin_async_sqlalchemy_adapter-1.10.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8e4efb44718946198b1359b341f3fe4d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 12815,
"upload_time": "2025-08-20T05:30:53",
"upload_time_iso_8601": "2025-08-20T05:30:53.449771Z",
"url": "https://files.pythonhosted.org/packages/c2/ab/b31e7649a09a6f2df0a33df26ba7e71668c3e6e3f081ca67b977669f6241/casbin_async_sqlalchemy_adapter-1.10.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bf8160f0cb5dc9603b9459ae99862928ca2eb48aa38ec442555f9ca0306c350b",
"md5": "0eff8e885b689956afd1b34b2ca5d627",
"sha256": "fa292bd7930986f26e1b0b22eca0ffd066ae588e4ee5df65fa89affdc7febbb4"
},
"downloads": -1,
"filename": "casbin_async_sqlalchemy_adapter-1.10.0.tar.gz",
"has_sig": false,
"md5_digest": "0eff8e885b689956afd1b34b2ca5d627",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 13312,
"upload_time": "2025-08-20T05:30:54",
"upload_time_iso_8601": "2025-08-20T05:30:54.249016Z",
"url": "https://files.pythonhosted.org/packages/bf/81/60f0cb5dc9603b9459ae99862928ca2eb48aa38ec442555f9ca0306c350b/casbin_async_sqlalchemy_adapter-1.10.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-20 05:30:54",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "officialpycasbin",
"github_project": "async-sqlalchemy-adapter",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"requirements": [
{
"name": "SQLAlchemy",
"specs": [
[
">=",
"1.4.0"
]
]
},
{
"name": "pycasbin",
"specs": [
[
">=",
"2.0.0"
]
]
}
],
"lcname": "casbin-async-sqlalchemy-adapter"
}