{"id":23393,"library":"casbin-async-sqlalchemy-adapter","title":"Casbin Async SQLAlchemy Adapter","description":"Asynchronous SQLAlchemy adapter for PyCasbin, enabling policy storage in relational databases with async support. Current version 1.17.0, requires Python >=3.7. Released regularly alongside PyCasbin releases.","status":"active","version":"1.17.0","language":"python","source_language":"en","source_url":"https://github.com/pycasbin/sqlalchemy-adapter","tags":["casbin","authorization","sqlalchemy","async","adapter","rbac"],"install":[{"cmd":"pip install casbin-async-sqlalchemy-adapter","lang":"bash","label":"Install via pip"}],"dependencies":[{"reason":"Core library; adapter is useless without it.","package":"casbin","optional":false},{"reason":"ORM used for database operations.","package":"sqlalchemy","optional":false},{"reason":"Async runtime support.","package":"asyncio","optional":false}],"imports":[{"note":"Old import path (submodule) no longer works; use top-level import.","wrong":"from casbin_async_sqlalchemy_adapter.adapter import Adapter","symbol":"Adapter","correct":"from casbin_async_sqlalchemy_adapter import Adapter"}],"quickstart":{"code":"import asyncio\nfrom casbin import Enforcer\nfrom casbin_async_sqlalchemy_adapter import Adapter\n\nasync def main():\n    adapter = Adapter('sqlite+aiosqlite:///test.db')\n    # Initialize adapter (creates table)\n    await adapter.create_table()\n    e = Enforcer('path/to/model.conf', adapter)\n    # ... use enforcer\n    await e.enforce('alice', 'data1', 'read')\n\nasyncio.run(main())","lang":"python","description":"Basic usage with sqlite+aiosqlite. Ensure you have aiosqlite installed. The adapter must be initialized with create_table() before use."},"warnings":[{"fix":"Use 'from casbin_async_sqlalchemy_adapter import Adapter' instead of 'from casbin_async_sqlalchemy_adapter.adapter import Adapter'.","message":"Adapter import path changed from submodule to top-level.","severity":"breaking","affected_versions":">=1.0.0"},{"fix":"Call await adapter.create_table() once before using the enforcer.","message":"Adapter does not auto-create table; must call create_table() explicitly.","severity":"gotcha","affected_versions":"all"},{"fix":"Use a compatible async driver URL (e.g., 'postgresql+asyncpg://...').","message":"Requires an async SQLAlchemy driver (e.g., aiosqlite for SQLite, asyncpg for PostgreSQL). Sync drivers will fail.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"pip install casbin-async-sqlalchemy-adapter aiosqlite","cause":"Library not installed or installed without async SQLAlchemy driver.","error":"ModuleNotFoundError: No module named 'casbin_async_sqlalchemy_adapter'"},{"fix":"Import Adapter from top-level and ensure version >=1.0.0.","cause":"Using an outdated version or incorrect import path.","error":"AttributeError: 'Adapter' object has no attribute 'create_table'"},{"fix":"Use 'sqlite+aiosqlite:///test.db' for async SQLite.","cause":"Using sync SQLAlchemy URL without async driver prefix.","error":"sqlalchemy.exc.ArgumentError: Could not parse rfc1738 URL from string 'sqlite:///test.db'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}