[{"data":1,"prerenderedAt":3104},["ShallowReactive",2],{"versions":3,"plugin-advanced-alchemy":6,"readme-advanced-alchemy":49},{"v3":4,"v4":5},"3.21.10","4.5.1",{"id":7,"title":8,"body":9,"category":10,"changelog":11,"compatibility":12,"created_at":14,"description":15,"documentation":16,"extension":17,"github":18,"icon":19,"issues":20,"key":21,"latest_version":22,"license":9,"maintainers":23,"meta":28,"monthly_downloads":29,"name":8,"navigation":30,"path":31,"pypi":21,"python_compatibility":32,"python_compatibility_raw":33,"repo":41,"seo":42,"sponsor":43,"stars":44,"stem":45,"type":46,"updated_at":47,"website":16,"__hash__":48},"plugins\u002Fplugins\u002Fadvanced-alchemy.yml","Advanced Alchemy",null,"Database","https:\u002F\u002Fadvanced-alchemy.litestar.dev\u002Flatest\u002Fchangelog",{"litestar":13},">=2.23.0","2023-09-17T17:39:42","Ready-to-go SQLAlchemy concoctions.","https:\u002F\u002Fadvanced-alchemy.litestar.dev\u002Flatest\u002F","yml","https:\u002F\u002Fgithub.com\u002Flitestar-org\u002Fadvanced-alchemy","advanced-alchemy.png","https:\u002F\u002Fgithub.com\u002Flitestar-org\u002Fadvanced-alchemy\u002Fissues\u002F","advanced-alchemy","1.11.0",[24],{"name":25,"github":26,"avatar":27},"Cody Fincher","cofin","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F204685?v=4",{},390809,true,"\u002Fplugins\u002Fadvanced-alchemy",{"raw":33,"specifier_set":33,"compatible":34},">=3.9",[35,36,37,38,39,40],"3.9","3.10","3.11","3.12","3.13","3.14","litestar-org\u002Fadvanced-alchemy",{"description":15},false,792,"plugins\u002Fadvanced-alchemy","official","2026-05-31T18:14:26","Wl_c78QtJinjSoHElwSWqN53Vmp6D1RB9mmyK7Qvzi8",{"id":50,"extension":51,"meta":52,"stem":3102,"__hash__":3103},"readme\u002Freadmes\u002Fadvanced-alchemy.md","md",{"body":53},{"type":54,"value":55,"toc":3092},"minimark",[56,80,265,274,279,282,569,573,578,603,621,625,628,1579,1587,1591,1594,2370,2374,2377,2382,2385,2395,2522,2529,2533,2650,2657,2661,2765,2772,2776,2885,2889,3026,3030,3039,3047,3065,3068,3088],[57,58,60,60,61,60],"p",{"align":59},"center","\n  ",[62,63,64,65,64,70,64,74,60],"picture",{},"\n    ",[66,67],"source",{"media":68,"srcSet":69},"(prefers-color-scheme: dark)","https:\u002F\u002Fraw.githubusercontent.com\u002Flitestar-org\u002Fbranding\u002Fmain\u002Fassets\u002FBranding%20-%20SVG%20-%20Transparent\u002FAA%20-%20Banner%20-%20Inline%20-%20Dark.svg",[66,71],{"media":72,"srcSet":73},"(prefers-color-scheme: light)","https:\u002F\u002Fraw.githubusercontent.com\u002Flitestar-org\u002Fbranding\u002Fmain\u002Fassets\u002FBranding%20-%20SVG%20-%20Transparent\u002FAA%20-%20Banner%20-%20Inline%20-%20Light.svg",[75,76],"img",{"alt":77,"src":73,"width":78,"height":79},"Advanced Alchemy Logo","100%","auto",[81,82,83],"div",{"align":59},[84,85,86,99],"table",{},[87,88,89],"thead",{},[90,91,92,96],"tr",{},[93,94,95],"th",{},"Project",[93,97,98],{},"Status",[100,101,102,137,181,204,227],"tbody",{},[90,103,104,108],{},[105,106,107],"td",{},"CI\u002FCD",[105,109,110,120,121,120,129],{},[111,112,116],"a",{"href":113,"rel":114},"https:\u002F\u002Fgithub.com\u002Flitestar-org\u002Fadvanced-alchemy\u002Factions\u002Fworkflows\u002Fpublish.yml",[115],"nofollow",[75,117],{"alt":118,"src":119},"Latest Release","https:\u002F\u002Fgithub.com\u002Flitestar-org\u002Fadvanced-alchemy\u002Factions\u002Fworkflows\u002Fpublish.yml\u002Fbadge.svg"," ",[111,122,125],{"href":123,"rel":124},"https:\u002F\u002Fgithub.com\u002Flitestar-org\u002Fadvanced-alchemy\u002Factions\u002Fworkflows\u002Fci.yml",[115],[75,126],{"alt":127,"src":128},"ci","https:\u002F\u002Fgithub.com\u002Flitestar-org\u002Fadvanced-alchemy\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg",[111,130,133],{"href":131,"rel":132},"https:\u002F\u002Fgithub.com\u002Flitestar-org\u002Fadvanced-alchemy\u002Factions\u002Fworkflows\u002Fdocs.yml",[115],[75,134],{"alt":135,"src":136},"Documentation Building","https:\u002F\u002Fgithub.com\u002Flitestar-org\u002Fadvanced-alchemy\u002Factions\u002Fworkflows\u002Fdocs.yml\u002Fbadge.svg?branch=main",[90,138,139,142],{},[105,140,141],{},"Quality",[105,143,144,120,152,120,160,120,167,120,174],{},[111,145,148],{"href":146,"rel":147},"https:\u002F\u002Fcodecov.io\u002Fgithub\u002Flitestar-org\u002Fadvanced-alchemy",[115],[75,149],{"alt":150,"src":151},"Coverage","https:\u002F\u002Fcodecov.io\u002Fgithub\u002Flitestar-org\u002Fadvanced-alchemy\u002Fgraph\u002Fbadge.svg?token=vKez4Pycrc",[111,153,156],{"href":154,"rel":155},"https:\u002F\u002Fsonarcloud.io\u002Fsummary\u002Fnew_code?id=litestar-org_advanced-alchemy",[115],[75,157],{"alt":158,"src":159},"Quality Gate Status","https:\u002F\u002Fsonarcloud.io\u002Fapi\u002Fproject_badges\u002Fmeasure?project=litestar-org_advanced-alchemy&metric=alert_status",[111,161,163],{"href":154,"rel":162},[115],[75,164],{"alt":165,"src":166},"Maintainability Rating","https:\u002F\u002Fsonarcloud.io\u002Fapi\u002Fproject_badges\u002Fmeasure?project=litestar-org_advanced-alchemy&metric=sqale_rating",[111,168,170],{"href":154,"rel":169},[115],[75,171],{"alt":172,"src":173},"Reliability Rating","https:\u002F\u002Fsonarcloud.io\u002Fapi\u002Fproject_badges\u002Fmeasure?project=litestar-org_advanced-alchemy&metric=reliability_rating",[111,175,177],{"href":154,"rel":176},[115],[75,178],{"alt":179,"src":180},"Security Rating","https:\u002F\u002Fsonarcloud.io\u002Fapi\u002Fproject_badges\u002Fmeasure?project=litestar-org_advanced-alchemy&metric=security_rating",[90,182,183,186],{},[105,184,185],{},"Package",[105,187,188,120,196,120,200],{},[111,189,192],{"href":190,"rel":191},"https:\u002F\u002Fbadge.fury.io\u002Fpy\u002Fadvanced-alchemy",[115],[75,193],{"alt":194,"src":195},"PyPI - Version","https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fadvanced-alchemy?labelColor=202235&color=edb641&logo=python&logoColor=edb641",[75,197],{"alt":198,"src":199},"PyPI - Support Python Versions","https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Fadvanced-alchemy?labelColor=202235&color=edb641&logo=python&logoColor=edb641",[75,201],{"alt":202,"src":203},"Advanced Alchemy PyPI - Downloads","https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fdm\u002Fadvanced-alchemy?logo=python&label=package%20downloads&labelColor=202235&color=edb641&logoColor=edb641",[90,205,206,209],{},[105,207,208],{},"Community",[105,210,211,120,219],{},[111,212,215],{"href":213,"rel":214},"https:\u002F\u002Fdiscord.gg\u002Flitestar",[115],[75,216],{"alt":217,"src":218},"Discord","https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F919193495116337154?labelColor=202235&color=edb641&label=chat%20on%20discord&logo=discord&logoColor=edb641",[111,220,223],{"href":221,"rel":222},"https:\u002F\u002Fmatrix.to\u002F#\u002F#litestar:matrix.org",[115],[75,224],{"alt":225,"src":226},"Matrix","https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fchat%20on%20Matrix-bridged-202235?labelColor=202235&color=edb641&logo=matrix&logoColor=edb641",[90,228,229,232],{},[105,230,231],{},"Meta",[105,233,234,120,241,120,249,120,257],{},[111,235,237],{"href":18,"rel":236},[115],[75,238],{"alt":239,"src":240},"Litestar Project","https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLitestar%20Org-%E2%AD%90%20Advanced%20Alchemy-202235.svg?logo=python&labelColor=202235&color=edb641&logoColor=edb641",[111,242,245],{"href":243,"rel":244},"https:\u002F\u002Fgithub.com\u002Fpython\u002Fmypy",[115],[75,246],{"alt":247,"src":248},"types - Mypy","https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Ftypes-Mypy-202235.svg?logo=python&labelColor=202235&color=edb641&logoColor=edb641",[111,250,253],{"href":251,"rel":252},"https:\u002F\u002Fspdx.org\u002Flicenses\u002F",[115],[75,254],{"alt":255,"src":256},"License - MIT","https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-202235.svg?logo=python&labelColor=202235&color=edb641&logoColor=edb641",[111,258,261],{"href":259,"rel":260},"https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff",[115],[75,262],{"alt":263,"src":264},"linting - Ruff","https:\u002F\u002Fimg.shields.io\u002Fendpoint?url=https:\u002F\u002Fraw.githubusercontent.com\u002Fcharliermarsh\u002Fruff\u002Fmain\u002Fassets\u002Fbadge\u002Fv2.json&labelColor=202235",[57,266,267,268,273],{},"Check out the ",[111,269,272],{"href":270,"rel":271},"https:\u002F\u002Fadvanced-alchemy.litestar.dev",[115],"project documentation"," 📚 for more information.",[275,276,278],"h2",{"id":277},"about","About",[57,280,281],{},"A carefully crafted, thoroughly tested, optimized companion library for SQLAlchemy,\noffering:",[283,284,285,289,292,295,298,313,316,319,322,353,356,367,382,401,428,440,443,452,480,566],"ul",{},[286,287,288],"li",{},"Sync and async repositories, featuring common CRUD and highly optimized bulk operations",[286,290,291],{},"Integration with major web frameworks including Litestar, Starlette, FastAPI, Sanic",[286,293,294],{},"Custom-built alembic configuration and CLI with optional framework integration",[286,296,297],{},"Utility base classes with audit columns, primary keys and utility functions",[286,299,300,305,306,120,309,312],{},[111,301,304],{"href":302,"rel":303},"https:\u002F\u002Fsqlmodel.tiangolo.com\u002F",[115],"SQLModel"," compatibility — use ",[307,308,304],"code",{},[307,310,311],{},"table=True"," models directly with repositories and services",[286,314,315],{},"Composite primary key support — work with multi-column primary keys across repositories, services, and bulk operations",[286,317,318],{},"Read\u002Fwrite replica routing with automatic query routing, round-robin\u002Frandom replica selection, and sticky-primary mode",[286,320,321],{},"Dogpile caching integration for query result caching",[286,323,324,325,328,329],{},"Built in ",[307,326,327],{},"File Object"," data type for storing objects:\n",[283,330,331,350],{},[286,332,333,334,341,342,349],{},"Unified interface for various storage backends (",[111,335,338],{"href":336,"rel":337},"https:\u002F\u002Ffilesystem-spec.readthedocs.io\u002Fen\u002Flatest\u002F",[115],[307,339,340],{},"fsspec"," and ",[111,343,346],{"href":344,"rel":345},"https:\u002F\u002Fdevelopmentseed.org\u002Fobstore\u002Flatest\u002F",[115],[307,347,348],{},"obstore",")",[286,351,352],{},"Optional lifecycle event hooks integrated with SQLAlchemy's event system to automatically save and delete files as records are inserted, updated, or deleted.",[286,354,355],{},"Optimized JSON types including a custom JSON type for Oracle",[286,357,358,359,366],{},"Integrated support for UUID6 and UUID7 (",[111,360,363],{"href":361,"rel":362},"https:\u002F\u002Fgithub.com\u002Faminalaee\u002Fuuid-utils",[115],[307,364,365],{},"uuid-utils"," when installed, otherwise native in Python 3.14+, with UUID4 fallback on older versions).",[286,368,369,370,377,378,381],{},"Integrated support for Nano ID using ",[111,371,374],{"href":372,"rel":373},"https:\u002F\u002Fgithub.com\u002Foliverlambson\u002Ffastnanoid",[115],[307,375,376],{},"fastnanoid"," (install with the ",[307,379,380],{},"nanoid"," extra)",[286,383,384,385,392,393,400],{},"Custom encrypted text type with multiple backend support including ",[111,386,389],{"href":387,"rel":388},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fpgcrypto.html",[115],[307,390,391],{},"pgcrypto"," for PostgreSQL and the Fernet implementation from ",[111,394,397],{"href":395,"rel":396},"https:\u002F\u002Fcryptography.io\u002Fen\u002Flatest\u002F",[115],[307,398,399],{},"cryptography"," for other databases",[286,402,403,404,411,412,419,420,427],{},"Custom password hashing type with multiple backend support including ",[111,405,408],{"href":406,"rel":407},"https:\u002F\u002Fgithub.com\u002FP-H-C\u002Fphc-winner-argon2",[115],[307,409,410],{},"Argon2",", ",[111,413,416],{"href":414,"rel":415},"https:\u002F\u002Fpasslib.readthedocs.io\u002Fen\u002Fstable\u002F",[115],[307,417,418],{},"Passlib",", and ",[111,421,424],{"href":422,"rel":423},"https:\u002F\u002Fpwdlib.readthedocs.io\u002Fen\u002Fstable\u002F",[115],[307,425,426],{},"Pwdlib"," with automatic salt generation and rehash-on-verify for transparent hash upgrades on login",[286,429,430,431,377,438,381],{},"Custom TOTP shared-secret type that stores an authenticator seed encrypted at rest and verifies time-based one-time passwords via ",[111,432,435],{"href":433,"rel":434},"https:\u002F\u002Fgithub.com\u002Fpyauth\u002Fpyotp",[115],[307,436,437],{},"pyotp",[307,439,437],{},[286,441,442],{},"Custom one-time-code type that stores email\u002FSMS verification codes hashed in JSON with built-in expiry, single-use redemption, attempt lockout, and a secure code generator",[286,444,445,446,451],{},"Pre-configured base classes with audit columns UUID or Big Integer primary keys and\na ",[111,447,450],{"href":448,"rel":449},"https:\u002F\u002Fdocs.sqlalchemy.org\u002Fen\u002F20\u002Fcore\u002Fconnections.html#configuring-sentinel-columns",[115],"sentinel column",".",[286,453,454,455],{},"Synchronous and asynchronous repositories featuring:\n",[283,456,457,460,463],{},[286,458,459],{},"Common CRUD operations for SQLAlchemy models",[286,461,462],{},"Bulk inserts, updates, upserts, and deletes with dialect-specific enhancements",[286,464,465,466,411,469,411,472,475,476,479],{},"Integrated counts, pagination, sorting, filtering with ",[307,467,468],{},"LIKE",[307,470,471],{},"IN",[307,473,474],{},"IS NULL","\u002F",[307,477,478],{},"IS NOT NULL",", and dates before and\u002For after.",[286,481,482,483],{},"Tested support for multiple database backends including:\n",[283,484,485,499,512,520,529,537,545,558],{},[286,486,487,488,493,494],{},"SQLite via ",[111,489,492],{"href":490,"rel":491},"https:\u002F\u002Faiosqlite.omnilib.dev\u002Fen\u002Fstable\u002F",[115],"aiosqlite"," or ",[111,495,498],{"href":496,"rel":497},"https:\u002F\u002Fdocs.python.org\u002F3\u002Flibrary\u002Fsqlite3.html",[115],"sqlite",[286,500,501,502,493,507],{},"Postgres via ",[111,503,506],{"href":504,"rel":505},"https:\u002F\u002Fmagicstack.github.io\u002Fasyncpg\u002Fcurrent\u002F",[115],"asyncpg",[111,508,511],{"href":509,"rel":510},"https:\u002F\u002Fwww.psycopg.org\u002Fpsycopg3\u002F",[115],"psycopg3 (async or sync)",[286,513,514,515],{},"MySQL via ",[111,516,519],{"href":517,"rel":518},"https:\u002F\u002Fgithub.com\u002Flong2ice\u002Fasyncmy",[115],"asyncmy",[286,521,522,523,528],{},"Oracle via ",[111,524,527],{"href":525,"rel":526},"https:\u002F\u002Foracle.github.io\u002Fpython-oracledb\u002F",[115],"oracledb (async or sync)"," (tested on 18c and 23c)",[286,530,531,532],{},"Google Spanner via ",[111,533,536],{"href":534,"rel":535},"https:\u002F\u002Fgithub.com\u002Fgoogleapis\u002Fpython-spanner-sqlalchemy\u002F",[115],"spanner-sqlalchemy",[286,538,539,540],{},"DuckDB via ",[111,541,544],{"href":542,"rel":543},"https:\u002F\u002Fgithub.com\u002FMause\u002Fduckdb_engine",[115],"duckdb_engine",[286,546,547,548,493,553],{},"Microsoft SQL Server via ",[111,549,552],{"href":550,"rel":551},"https:\u002F\u002Fgithub.com\u002Fmkleehammer\u002Fpyodbc",[115],"pyodbc",[111,554,557],{"href":555,"rel":556},"https:\u002F\u002Fgithub.com\u002Faio-libs\u002Faioodbc",[115],"aioodbc",[286,559,560,561],{},"CockroachDB via ",[111,562,565],{"href":563,"rel":564},"https:\u002F\u002Fgithub.com\u002Fcockroachdb\u002Fsqlalchemy-cockroachdb",[115],"sqlalchemy-cockroachdb (async or sync)",[286,567,568],{},"...and much more",[275,570,572],{"id":571},"usage","Usage",[574,575,577],"h3",{"id":576},"installation","Installation",[579,580,585],"pre",{"className":581,"code":582,"language":583,"meta":584,"style":584},"language-shell shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","pip install advanced-alchemy\n","shell","",[307,586,587],{"__ignoreMap":584},[588,589,592,596,600],"span",{"class":590,"line":591},"line",1,[588,593,595],{"class":594},"s52Pk","pip",[588,597,599],{"class":598},"sGFVr"," install",[588,601,602],{"class":598}," advanced-alchemy\n",[604,605,606],"blockquote",{},[57,607,608,611,614,615,620],{},[588,609,610],{},"!IMPORTANT",[612,613],"br",{},"\nCheck out ",[111,616,619],{"href":617,"rel":618},"https:\u002F\u002Fadvanced-alchemy.litestar.dev\u002Flatest\u002F#installation",[115],"the installation guide"," in our official documentation!",[574,622,624],{"id":623},"repositories","Repositories",[57,626,627],{},"Advanced Alchemy includes a set of asynchronous and synchronous repository classes for easy CRUD\noperations on your SQLAlchemy models.",[629,630,631,635],"details",{},[632,633,634],"summary",{},"Click to expand the example",[579,636,640],{"className":637,"code":638,"language":639,"meta":584,"style":584},"language-python shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","from advanced_alchemy import base, repository, config\nfrom sqlalchemy import create_engine\nfrom sqlalchemy.orm import Mapped, sessionmaker\n\n\nclass User(base.UUIDBase):\n    # you can optionally override the generated table name by manually setting it.\n    __tablename__ = \"user_account\"  # type: ignore[assignment]\n    email: Mapped[str]\n    name: Mapped[str]\n\n\nclass UserRepository(repository.SQLAlchemySyncRepository[User]):\n    \"\"\"User repository.\"\"\"\n\n    model_type = User\n\n\ndb = config.SQLAlchemySyncConfig(connection_string=\"duckdb:\u002F\u002F\u002F:memory:\", session_config=config.SyncSessionConfig(expire_on_commit=False))\n\n# Initializes the database.\nwith db.get_engine().begin() as conn:\n    User.metadata.create_all(conn)\n\nwith db.get_session() as db_session:\n    repo = UserRepository(session=db_session)\n    # 1) Create multiple users with `add_many`\n    bulk_users = [\n        {\"email\": 'cody@litestar.dev', 'name': 'Cody'},\n        {\"email\": 'janek@litestar.dev', 'name': 'Janek'},\n        {\"email\": 'peter@litestar.dev', 'name': 'Peter'},\n        {\"email\": 'jacob@litestar.dev', 'name': 'Jacob'}\n    ]\n    objs = repo.add_many([User(**raw_user) for raw_user in bulk_users])\n    db_session.commit()\n    print(f\"Created {len(objs)} new objects.\")\n\n    # 2) Select paginated data and total row count.  Pass additional filters as kwargs\n    created_objs, total_objs = repo.get_many_and_count(LimitOffset(limit=10, offset=0), name=\"Cody\")\n    print(f\"Selected {len(created_objs)} records out of a total of {total_objs}.\")\n\n    # 3) Let's remove the batch of records selected.\n    deleted_objs = repo.delete_many([new_obj.id for new_obj in created_objs])\n    print(f\"Removed {len(deleted_objs)} records out of a total of {total_objs}.\")\n\n    # 4) Let's count the remaining rows\n    remaining_count = repo.count()\n    print(f\"Found {remaining_count} remaining records after delete.\")\n","python",[307,641,642,670,683,706,712,717,741,748,769,789,805,810,815,842,854,859,870,875,880,935,940,946,978,1002,1007,1028,1050,1056,1067,1112,1151,1190,1230,1236,1280,1294,1330,1335,1341,1402,1442,1447,1453,1490,1527,1532,1538,1555],{"__ignoreMap":584},[588,643,644,648,652,655,658,662,665,667],{"class":590,"line":591},[588,645,647],{"class":646},"s8R28","from",[588,649,651],{"class":650},"sZSNi"," advanced_alchemy ",[588,653,654],{"class":646},"import",[588,656,657],{"class":650}," base",[588,659,661],{"class":660},"sDfIl",",",[588,663,664],{"class":650}," repository",[588,666,661],{"class":660},[588,668,669],{"class":650}," config\n",[588,671,673,675,678,680],{"class":590,"line":672},2,[588,674,647],{"class":646},[588,676,677],{"class":650}," sqlalchemy ",[588,679,654],{"class":646},[588,681,682],{"class":650}," create_engine\n",[588,684,686,688,691,693,696,698,701,703],{"class":590,"line":685},3,[588,687,647],{"class":646},[588,689,690],{"class":650}," sqlalchemy",[588,692,451],{"class":660},[588,694,695],{"class":650},"orm ",[588,697,654],{"class":646},[588,699,700],{"class":650}," Mapped",[588,702,661],{"class":660},[588,704,705],{"class":650}," sessionmaker\n",[588,707,709],{"class":590,"line":708},4,[588,710,711],{"emptyLinePlaceholder":30},"\n",[588,713,715],{"class":590,"line":714},5,[588,716,711],{"emptyLinePlaceholder":30},[588,718,720,724,727,730,733,735,738],{"class":590,"line":719},6,[588,721,723],{"class":722},"smZ93","class",[588,725,726],{"class":594}," User",[588,728,729],{"class":660},"(",[588,731,732],{"class":594},"base",[588,734,451],{"class":660},[588,736,737],{"class":594},"UUIDBase",[588,739,740],{"class":660},"):\n",[588,742,744],{"class":590,"line":743},7,[588,745,747],{"class":746},"sWuyu","    # you can optionally override the generated table name by manually setting it.\n",[588,749,751,754,757,760,763,766],{"class":590,"line":750},8,[588,752,753],{"class":650},"    __tablename__ ",[588,755,756],{"class":660},"=",[588,758,759],{"class":660}," \"",[588,761,762],{"class":598},"user_account",[588,764,765],{"class":660},"\"",[588,767,768],{"class":746},"  # type: ignore[assignment]\n",[588,770,772,775,778,780,783,786],{"class":590,"line":771},9,[588,773,774],{"class":650},"    email",[588,776,777],{"class":660},":",[588,779,700],{"class":650},[588,781,782],{"class":660},"[",[588,784,785],{"class":594},"str",[588,787,788],{"class":660},"]\n",[588,790,792,795,797,799,801,803],{"class":590,"line":791},10,[588,793,794],{"class":650},"    name",[588,796,777],{"class":660},[588,798,700],{"class":650},[588,800,782],{"class":660},[588,802,785],{"class":594},[588,804,788],{"class":660},[588,806,808],{"class":590,"line":807},11,[588,809,711],{"emptyLinePlaceholder":30},[588,811,813],{"class":590,"line":812},12,[588,814,711],{"emptyLinePlaceholder":30},[588,816,818,820,823,825,828,830,834,836,839],{"class":590,"line":817},13,[588,819,723],{"class":722},[588,821,822],{"class":594}," UserRepository",[588,824,729],{"class":660},[588,826,827],{"class":594},"repository",[588,829,451],{"class":660},[588,831,833],{"class":832},"sRlkE","SQLAlchemySyncRepository",[588,835,782],{"class":660},[588,837,838],{"class":832},"User",[588,840,841],{"class":660},"]):\n",[588,843,845,848,851],{"class":590,"line":844},14,[588,846,847],{"class":646},"    \"\"\"",[588,849,850],{"class":746},"User repository.",[588,852,853],{"class":646},"\"\"\"\n",[588,855,857],{"class":590,"line":856},15,[588,858,711],{"emptyLinePlaceholder":30},[588,860,862,865,867],{"class":590,"line":861},16,[588,863,864],{"class":650},"    model_type ",[588,866,756],{"class":660},[588,868,869],{"class":650}," User\n",[588,871,873],{"class":590,"line":872},17,[588,874,711],{"emptyLinePlaceholder":30},[588,876,878],{"class":590,"line":877},18,[588,879,711],{"emptyLinePlaceholder":30},[588,881,883,886,888,891,893,897,899,903,905,907,910,912,914,917,919,922,924,927,929,932],{"class":590,"line":882},19,[588,884,885],{"class":650},"db ",[588,887,756],{"class":660},[588,889,890],{"class":650}," config",[588,892,451],{"class":660},[588,894,896],{"class":895},"s3cPz","SQLAlchemySyncConfig",[588,898,729],{"class":660},[588,900,902],{"class":901},"s1nJG","connection_string",[588,904,756],{"class":660},[588,906,765],{"class":660},[588,908,909],{"class":598},"duckdb:\u002F\u002F\u002F:memory:",[588,911,765],{"class":660},[588,913,661],{"class":660},[588,915,916],{"class":901}," session_config",[588,918,756],{"class":660},[588,920,921],{"class":895},"config",[588,923,451],{"class":660},[588,925,926],{"class":895},"SyncSessionConfig",[588,928,729],{"class":660},[588,930,931],{"class":901},"expire_on_commit",[588,933,934],{"class":660},"=False))\n",[588,936,938],{"class":590,"line":937},20,[588,939,711],{"emptyLinePlaceholder":30},[588,941,943],{"class":590,"line":942},21,[588,944,945],{"class":746},"# Initializes the database.\n",[588,947,949,952,955,957,960,963,966,969,972,975],{"class":590,"line":948},22,[588,950,951],{"class":646},"with",[588,953,954],{"class":650}," db",[588,956,451],{"class":660},[588,958,959],{"class":895},"get_engine",[588,961,962],{"class":660},"().",[588,964,965],{"class":895},"begin",[588,967,968],{"class":660},"()",[588,970,971],{"class":646}," as",[588,973,974],{"class":650}," conn",[588,976,977],{"class":660},":\n",[588,979,981,984,986,989,991,994,996,999],{"class":590,"line":980},23,[588,982,983],{"class":650},"    User",[588,985,451],{"class":660},[588,987,988],{"class":832},"metadata",[588,990,451],{"class":660},[588,992,993],{"class":895},"create_all",[588,995,729],{"class":660},[588,997,998],{"class":895},"conn",[588,1000,1001],{"class":660},")\n",[588,1003,1005],{"class":590,"line":1004},24,[588,1006,711],{"emptyLinePlaceholder":30},[588,1008,1010,1012,1014,1016,1019,1021,1023,1026],{"class":590,"line":1009},25,[588,1011,951],{"class":646},[588,1013,954],{"class":650},[588,1015,451],{"class":660},[588,1017,1018],{"class":895},"get_session",[588,1020,968],{"class":660},[588,1022,971],{"class":646},[588,1024,1025],{"class":650}," db_session",[588,1027,977],{"class":660},[588,1029,1031,1034,1036,1038,1040,1043,1045,1048],{"class":590,"line":1030},26,[588,1032,1033],{"class":650},"    repo ",[588,1035,756],{"class":660},[588,1037,822],{"class":895},[588,1039,729],{"class":660},[588,1041,1042],{"class":901},"session",[588,1044,756],{"class":660},[588,1046,1047],{"class":895},"db_session",[588,1049,1001],{"class":660},[588,1051,1053],{"class":590,"line":1052},27,[588,1054,1055],{"class":746},"    # 1) Create multiple users with `add_many`\n",[588,1057,1059,1062,1064],{"class":590,"line":1058},28,[588,1060,1061],{"class":650},"    bulk_users ",[588,1063,756],{"class":660},[588,1065,1066],{"class":660}," [\n",[588,1068,1070,1073,1075,1078,1080,1082,1085,1088,1091,1093,1095,1098,1100,1102,1104,1107,1109],{"class":590,"line":1069},29,[588,1071,1072],{"class":660},"        {",[588,1074,765],{"class":660},[588,1076,1077],{"class":598},"email",[588,1079,765],{"class":660},[588,1081,777],{"class":660},[588,1083,1084],{"class":660}," '",[588,1086,1087],{"class":598},"cody@litestar.dev",[588,1089,1090],{"class":660},"'",[588,1092,661],{"class":660},[588,1094,1084],{"class":660},[588,1096,1097],{"class":598},"name",[588,1099,1090],{"class":660},[588,1101,777],{"class":660},[588,1103,1084],{"class":660},[588,1105,1106],{"class":598},"Cody",[588,1108,1090],{"class":660},[588,1110,1111],{"class":660},"},\n",[588,1113,1115,1117,1119,1121,1123,1125,1127,1130,1132,1134,1136,1138,1140,1142,1144,1147,1149],{"class":590,"line":1114},30,[588,1116,1072],{"class":660},[588,1118,765],{"class":660},[588,1120,1077],{"class":598},[588,1122,765],{"class":660},[588,1124,777],{"class":660},[588,1126,1084],{"class":660},[588,1128,1129],{"class":598},"janek@litestar.dev",[588,1131,1090],{"class":660},[588,1133,661],{"class":660},[588,1135,1084],{"class":660},[588,1137,1097],{"class":598},[588,1139,1090],{"class":660},[588,1141,777],{"class":660},[588,1143,1084],{"class":660},[588,1145,1146],{"class":598},"Janek",[588,1148,1090],{"class":660},[588,1150,1111],{"class":660},[588,1152,1154,1156,1158,1160,1162,1164,1166,1169,1171,1173,1175,1177,1179,1181,1183,1186,1188],{"class":590,"line":1153},31,[588,1155,1072],{"class":660},[588,1157,765],{"class":660},[588,1159,1077],{"class":598},[588,1161,765],{"class":660},[588,1163,777],{"class":660},[588,1165,1084],{"class":660},[588,1167,1168],{"class":598},"peter@litestar.dev",[588,1170,1090],{"class":660},[588,1172,661],{"class":660},[588,1174,1084],{"class":660},[588,1176,1097],{"class":598},[588,1178,1090],{"class":660},[588,1180,777],{"class":660},[588,1182,1084],{"class":660},[588,1184,1185],{"class":598},"Peter",[588,1187,1090],{"class":660},[588,1189,1111],{"class":660},[588,1191,1193,1195,1197,1199,1201,1203,1205,1208,1210,1212,1214,1216,1218,1220,1222,1225,1227],{"class":590,"line":1192},32,[588,1194,1072],{"class":660},[588,1196,765],{"class":660},[588,1198,1077],{"class":598},[588,1200,765],{"class":660},[588,1202,777],{"class":660},[588,1204,1084],{"class":660},[588,1206,1207],{"class":598},"jacob@litestar.dev",[588,1209,1090],{"class":660},[588,1211,661],{"class":660},[588,1213,1084],{"class":660},[588,1215,1097],{"class":598},[588,1217,1090],{"class":660},[588,1219,777],{"class":660},[588,1221,1084],{"class":660},[588,1223,1224],{"class":598},"Jacob",[588,1226,1090],{"class":660},[588,1228,1229],{"class":660},"}\n",[588,1231,1233],{"class":590,"line":1232},33,[588,1234,1235],{"class":660},"    ]\n",[588,1237,1239,1242,1244,1247,1249,1252,1255,1257,1260,1263,1265,1268,1271,1274,1277],{"class":590,"line":1238},34,[588,1240,1241],{"class":650},"    objs ",[588,1243,756],{"class":660},[588,1245,1246],{"class":650}," repo",[588,1248,451],{"class":660},[588,1250,1251],{"class":895},"add_many",[588,1253,1254],{"class":660},"([",[588,1256,838],{"class":895},[588,1258,1259],{"class":660},"(**",[588,1261,1262],{"class":895},"raw_user",[588,1264,349],{"class":660},[588,1266,1267],{"class":646}," for",[588,1269,1270],{"class":895}," raw_user ",[588,1272,1273],{"class":646},"in",[588,1275,1276],{"class":895}," bulk_users",[588,1278,1279],{"class":660},"])\n",[588,1281,1283,1286,1288,1291],{"class":590,"line":1282},35,[588,1284,1285],{"class":650},"    db_session",[588,1287,451],{"class":660},[588,1289,1290],{"class":895},"commit",[588,1292,1293],{"class":660},"()\n",[588,1295,1297,1300,1302,1305,1308,1312,1315,1317,1320,1322,1325,1328],{"class":590,"line":1296},36,[588,1298,1299],{"class":895},"    print",[588,1301,729],{"class":660},[588,1303,1304],{"class":722},"f",[588,1306,1307],{"class":598},"\"Created ",[588,1309,1311],{"class":1310},"sYRBq","{",[588,1313,1314],{"class":895},"len",[588,1316,729],{"class":660},[588,1318,1319],{"class":895},"objs",[588,1321,349],{"class":660},[588,1323,1324],{"class":1310},"}",[588,1326,1327],{"class":598}," new objects.\"",[588,1329,1001],{"class":660},[588,1331,1333],{"class":590,"line":1332},37,[588,1334,711],{"emptyLinePlaceholder":30},[588,1336,1338],{"class":590,"line":1337},38,[588,1339,1340],{"class":746},"    # 2) Select paginated data and total row count.  Pass additional filters as kwargs\n",[588,1342,1344,1347,1349,1352,1354,1356,1358,1361,1363,1366,1368,1371,1373,1376,1378,1381,1383,1386,1389,1392,1394,1396,1398,1400],{"class":590,"line":1343},39,[588,1345,1346],{"class":650},"    created_objs",[588,1348,661],{"class":660},[588,1350,1351],{"class":650}," total_objs ",[588,1353,756],{"class":660},[588,1355,1246],{"class":650},[588,1357,451],{"class":660},[588,1359,1360],{"class":895},"get_many_and_count",[588,1362,729],{"class":660},[588,1364,1365],{"class":895},"LimitOffset",[588,1367,729],{"class":660},[588,1369,1370],{"class":901},"limit",[588,1372,756],{"class":660},[588,1374,1375],{"class":1310},"10",[588,1377,661],{"class":660},[588,1379,1380],{"class":901}," offset",[588,1382,756],{"class":660},[588,1384,1385],{"class":1310},"0",[588,1387,1388],{"class":660},"),",[588,1390,1391],{"class":901}," name",[588,1393,756],{"class":660},[588,1395,765],{"class":660},[588,1397,1106],{"class":598},[588,1399,765],{"class":660},[588,1401,1001],{"class":660},[588,1403,1405,1407,1409,1411,1414,1416,1418,1420,1423,1425,1427,1430,1432,1435,1437,1440],{"class":590,"line":1404},40,[588,1406,1299],{"class":895},[588,1408,729],{"class":660},[588,1410,1304],{"class":722},[588,1412,1413],{"class":598},"\"Selected ",[588,1415,1311],{"class":1310},[588,1417,1314],{"class":895},[588,1419,729],{"class":660},[588,1421,1422],{"class":895},"created_objs",[588,1424,349],{"class":660},[588,1426,1324],{"class":1310},[588,1428,1429],{"class":598}," records out of a total of ",[588,1431,1311],{"class":1310},[588,1433,1434],{"class":895},"total_objs",[588,1436,1324],{"class":1310},[588,1438,1439],{"class":598},".\"",[588,1441,1001],{"class":660},[588,1443,1445],{"class":590,"line":1444},41,[588,1446,711],{"emptyLinePlaceholder":30},[588,1448,1450],{"class":590,"line":1449},42,[588,1451,1452],{"class":746},"    # 3) Let's remove the batch of records selected.\n",[588,1454,1456,1459,1461,1463,1465,1468,1470,1473,1475,1478,1480,1483,1485,1488],{"class":590,"line":1455},43,[588,1457,1458],{"class":650},"    deleted_objs ",[588,1460,756],{"class":660},[588,1462,1246],{"class":650},[588,1464,451],{"class":660},[588,1466,1467],{"class":895},"delete_many",[588,1469,1254],{"class":660},[588,1471,1472],{"class":895},"new_obj",[588,1474,451],{"class":660},[588,1476,1477],{"class":832},"id",[588,1479,1267],{"class":646},[588,1481,1482],{"class":895}," new_obj ",[588,1484,1273],{"class":646},[588,1486,1487],{"class":895}," created_objs",[588,1489,1279],{"class":660},[588,1491,1493,1495,1497,1499,1502,1504,1506,1508,1511,1513,1515,1517,1519,1521,1523,1525],{"class":590,"line":1492},44,[588,1494,1299],{"class":895},[588,1496,729],{"class":660},[588,1498,1304],{"class":722},[588,1500,1501],{"class":598},"\"Removed ",[588,1503,1311],{"class":1310},[588,1505,1314],{"class":895},[588,1507,729],{"class":660},[588,1509,1510],{"class":895},"deleted_objs",[588,1512,349],{"class":660},[588,1514,1324],{"class":1310},[588,1516,1429],{"class":598},[588,1518,1311],{"class":1310},[588,1520,1434],{"class":895},[588,1522,1324],{"class":1310},[588,1524,1439],{"class":598},[588,1526,1001],{"class":660},[588,1528,1530],{"class":590,"line":1529},45,[588,1531,711],{"emptyLinePlaceholder":30},[588,1533,1535],{"class":590,"line":1534},46,[588,1536,1537],{"class":746},"    # 4) Let's count the remaining rows\n",[588,1539,1541,1544,1546,1548,1550,1553],{"class":590,"line":1540},47,[588,1542,1543],{"class":650},"    remaining_count ",[588,1545,756],{"class":660},[588,1547,1246],{"class":650},[588,1549,451],{"class":660},[588,1551,1552],{"class":895},"count",[588,1554,1293],{"class":660},[588,1556,1558,1560,1562,1564,1567,1569,1572,1574,1577],{"class":590,"line":1557},48,[588,1559,1299],{"class":895},[588,1561,729],{"class":660},[588,1563,1304],{"class":722},[588,1565,1566],{"class":598},"\"Found ",[588,1568,1311],{"class":1310},[588,1570,1571],{"class":895},"remaining_count",[588,1573,1324],{"class":1310},[588,1575,1576],{"class":598}," remaining records after delete.\"",[588,1578,1001],{"class":660},[57,1580,1581,1582],{},"For a full standalone example, see the sample ",[111,1583,1586],{"href":1584,"rel":1585},"https:\u002F\u002Fgithub.com\u002Flitestar-org\u002Fadvanced-alchemy\u002Fblob\u002Fmain\u002Fexamples\u002Fstandalone.py",[115],"here",[574,1588,1590],{"id":1589},"services","Services",[57,1592,1593],{},"Advanced Alchemy includes an additional service class to make working with a repository easier.\nThis class is designed to accept data as a dictionary or SQLAlchemy model,\nand it will handle the type conversions for you.",[629,1595,1596,1599],{},[632,1597,1598],{},"Here's the same example from above but using a service to create the data:",[579,1600,1602],{"className":637,"code":1601,"language":639,"meta":584,"style":584},"from advanced_alchemy import base, repository, filters, service, config\nfrom sqlalchemy import create_engine\nfrom sqlalchemy.orm import Mapped, sessionmaker\n\n\nclass User(base.UUIDBase):\n    # you can optionally override the generated table name by manually setting it.\n    __tablename__ = \"user_account\"  # type: ignore[assignment]\n    email: Mapped[str]\n    name: Mapped[str]\n\nclass UserService(service.SQLAlchemySyncRepositoryService[User]):\n    \"\"\"User repository.\"\"\"\n    class Repo(repository.SQLAlchemySyncRepository[User]):\n        \"\"\"User repository.\"\"\"\n\n        model_type = User\n\n    repository_type = Repo\n\ndb = config.SQLAlchemySyncConfig(connection_string=\"duckdb:\u002F\u002F\u002F:memory:\", session_config=config.SyncSessionConfig(expire_on_commit=False))\n\n# Initializes the database.\nwith db.get_engine().begin() as conn:\n    User.metadata.create_all(conn)\n\nwith db.get_session() as db_session:\n    service = UserService(session=db_session)\n    # 1) Create multiple users with `add_many`\n    objs = service.create_many([\n        {\"email\": 'cody@litestar.dev', 'name': 'Cody'},\n        {\"email\": 'janek@litestar.dev', 'name': 'Janek'},\n        {\"email\": 'peter@litestar.dev', 'name': 'Peter'},\n        {\"email\": 'jacob@litestar.dev', 'name': 'Jacob'}\n    ])\n    print(objs)\n    print(f\"Created {len(objs)} new objects.\")\n\n    # 2) Select paginated data and total row count.  Pass additional filters as kwargs\n    created_objs, total_objs = service.get_many_and_count(LimitOffset(limit=10, offset=0), name=\"Cody\")\n    print(f\"Selected {len(created_objs)} records out of a total of {total_objs}.\")\n\n    # 3) Let's remove the batch of records selected.\n    deleted_objs = service.delete_many([new_obj.id for new_obj in created_objs])\n    print(f\"Removed {len(deleted_objs)} records out of a total of {total_objs}.\")\n\n    # 4) Let's count the remaining rows\n    remaining_count = service.count()\n    print(f\"Found {remaining_count} remaining records after delete.\")\n",[307,1603,1604,1632,1642,1660,1664,1668,1684,1688,1702,1716,1730,1734,1757,1765,1787,1796,1800,1809,1813,1823,1827,1869,1873,1877,1899,1917,1921,1939,1958,1962,1978,2014,2050,2086,2122,2127,2137,2163,2167,2171,2221,2255,2259,2263,2293,2327,2331,2335,2349],{"__ignoreMap":584},[588,1605,1606,1608,1610,1612,1614,1616,1618,1620,1623,1625,1628,1630],{"class":590,"line":591},[588,1607,647],{"class":646},[588,1609,651],{"class":650},[588,1611,654],{"class":646},[588,1613,657],{"class":650},[588,1615,661],{"class":660},[588,1617,664],{"class":650},[588,1619,661],{"class":660},[588,1621,1622],{"class":650}," filters",[588,1624,661],{"class":660},[588,1626,1627],{"class":650}," service",[588,1629,661],{"class":660},[588,1631,669],{"class":650},[588,1633,1634,1636,1638,1640],{"class":590,"line":672},[588,1635,647],{"class":646},[588,1637,677],{"class":650},[588,1639,654],{"class":646},[588,1641,682],{"class":650},[588,1643,1644,1646,1648,1650,1652,1654,1656,1658],{"class":590,"line":685},[588,1645,647],{"class":646},[588,1647,690],{"class":650},[588,1649,451],{"class":660},[588,1651,695],{"class":650},[588,1653,654],{"class":646},[588,1655,700],{"class":650},[588,1657,661],{"class":660},[588,1659,705],{"class":650},[588,1661,1662],{"class":590,"line":708},[588,1663,711],{"emptyLinePlaceholder":30},[588,1665,1666],{"class":590,"line":714},[588,1667,711],{"emptyLinePlaceholder":30},[588,1669,1670,1672,1674,1676,1678,1680,1682],{"class":590,"line":719},[588,1671,723],{"class":722},[588,1673,726],{"class":594},[588,1675,729],{"class":660},[588,1677,732],{"class":594},[588,1679,451],{"class":660},[588,1681,737],{"class":594},[588,1683,740],{"class":660},[588,1685,1686],{"class":590,"line":743},[588,1687,747],{"class":746},[588,1689,1690,1692,1694,1696,1698,1700],{"class":590,"line":750},[588,1691,753],{"class":650},[588,1693,756],{"class":660},[588,1695,759],{"class":660},[588,1697,762],{"class":598},[588,1699,765],{"class":660},[588,1701,768],{"class":746},[588,1703,1704,1706,1708,1710,1712,1714],{"class":590,"line":771},[588,1705,774],{"class":650},[588,1707,777],{"class":660},[588,1709,700],{"class":650},[588,1711,782],{"class":660},[588,1713,785],{"class":594},[588,1715,788],{"class":660},[588,1717,1718,1720,1722,1724,1726,1728],{"class":590,"line":791},[588,1719,794],{"class":650},[588,1721,777],{"class":660},[588,1723,700],{"class":650},[588,1725,782],{"class":660},[588,1727,785],{"class":594},[588,1729,788],{"class":660},[588,1731,1732],{"class":590,"line":807},[588,1733,711],{"emptyLinePlaceholder":30},[588,1735,1736,1738,1741,1743,1746,1748,1751,1753,1755],{"class":590,"line":812},[588,1737,723],{"class":722},[588,1739,1740],{"class":594}," UserService",[588,1742,729],{"class":660},[588,1744,1745],{"class":594},"service",[588,1747,451],{"class":660},[588,1749,1750],{"class":832},"SQLAlchemySyncRepositoryService",[588,1752,782],{"class":660},[588,1754,838],{"class":832},[588,1756,841],{"class":660},[588,1758,1759,1761,1763],{"class":590,"line":817},[588,1760,847],{"class":646},[588,1762,850],{"class":746},[588,1764,853],{"class":646},[588,1766,1767,1770,1773,1775,1777,1779,1781,1783,1785],{"class":590,"line":844},[588,1768,1769],{"class":722},"    class",[588,1771,1772],{"class":594}," Repo",[588,1774,729],{"class":660},[588,1776,827],{"class":594},[588,1778,451],{"class":660},[588,1780,833],{"class":832},[588,1782,782],{"class":660},[588,1784,838],{"class":832},[588,1786,841],{"class":660},[588,1788,1789,1792,1794],{"class":590,"line":856},[588,1790,1791],{"class":646},"        \"\"\"",[588,1793,850],{"class":746},[588,1795,853],{"class":646},[588,1797,1798],{"class":590,"line":861},[588,1799,711],{"emptyLinePlaceholder":30},[588,1801,1802,1805,1807],{"class":590,"line":872},[588,1803,1804],{"class":650},"        model_type ",[588,1806,756],{"class":660},[588,1808,869],{"class":650},[588,1810,1811],{"class":590,"line":877},[588,1812,711],{"emptyLinePlaceholder":30},[588,1814,1815,1818,1820],{"class":590,"line":882},[588,1816,1817],{"class":650},"    repository_type ",[588,1819,756],{"class":660},[588,1821,1822],{"class":650}," Repo\n",[588,1824,1825],{"class":590,"line":937},[588,1826,711],{"emptyLinePlaceholder":30},[588,1828,1829,1831,1833,1835,1837,1839,1841,1843,1845,1847,1849,1851,1853,1855,1857,1859,1861,1863,1865,1867],{"class":590,"line":942},[588,1830,885],{"class":650},[588,1832,756],{"class":660},[588,1834,890],{"class":650},[588,1836,451],{"class":660},[588,1838,896],{"class":895},[588,1840,729],{"class":660},[588,1842,902],{"class":901},[588,1844,756],{"class":660},[588,1846,765],{"class":660},[588,1848,909],{"class":598},[588,1850,765],{"class":660},[588,1852,661],{"class":660},[588,1854,916],{"class":901},[588,1856,756],{"class":660},[588,1858,921],{"class":895},[588,1860,451],{"class":660},[588,1862,926],{"class":895},[588,1864,729],{"class":660},[588,1866,931],{"class":901},[588,1868,934],{"class":660},[588,1870,1871],{"class":590,"line":948},[588,1872,711],{"emptyLinePlaceholder":30},[588,1874,1875],{"class":590,"line":980},[588,1876,945],{"class":746},[588,1878,1879,1881,1883,1885,1887,1889,1891,1893,1895,1897],{"class":590,"line":1004},[588,1880,951],{"class":646},[588,1882,954],{"class":650},[588,1884,451],{"class":660},[588,1886,959],{"class":895},[588,1888,962],{"class":660},[588,1890,965],{"class":895},[588,1892,968],{"class":660},[588,1894,971],{"class":646},[588,1896,974],{"class":650},[588,1898,977],{"class":660},[588,1900,1901,1903,1905,1907,1909,1911,1913,1915],{"class":590,"line":1009},[588,1902,983],{"class":650},[588,1904,451],{"class":660},[588,1906,988],{"class":832},[588,1908,451],{"class":660},[588,1910,993],{"class":895},[588,1912,729],{"class":660},[588,1914,998],{"class":895},[588,1916,1001],{"class":660},[588,1918,1919],{"class":590,"line":1030},[588,1920,711],{"emptyLinePlaceholder":30},[588,1922,1923,1925,1927,1929,1931,1933,1935,1937],{"class":590,"line":1052},[588,1924,951],{"class":646},[588,1926,954],{"class":650},[588,1928,451],{"class":660},[588,1930,1018],{"class":895},[588,1932,968],{"class":660},[588,1934,971],{"class":646},[588,1936,1025],{"class":650},[588,1938,977],{"class":660},[588,1940,1941,1944,1946,1948,1950,1952,1954,1956],{"class":590,"line":1058},[588,1942,1943],{"class":650},"    service ",[588,1945,756],{"class":660},[588,1947,1740],{"class":895},[588,1949,729],{"class":660},[588,1951,1042],{"class":901},[588,1953,756],{"class":660},[588,1955,1047],{"class":895},[588,1957,1001],{"class":660},[588,1959,1960],{"class":590,"line":1069},[588,1961,1055],{"class":746},[588,1963,1964,1966,1968,1970,1972,1975],{"class":590,"line":1114},[588,1965,1241],{"class":650},[588,1967,756],{"class":660},[588,1969,1627],{"class":650},[588,1971,451],{"class":660},[588,1973,1974],{"class":895},"create_many",[588,1976,1977],{"class":660},"([\n",[588,1979,1980,1982,1984,1986,1988,1990,1992,1994,1996,1998,2000,2002,2004,2006,2008,2010,2012],{"class":590,"line":1153},[588,1981,1072],{"class":660},[588,1983,765],{"class":660},[588,1985,1077],{"class":598},[588,1987,765],{"class":660},[588,1989,777],{"class":660},[588,1991,1084],{"class":660},[588,1993,1087],{"class":598},[588,1995,1090],{"class":660},[588,1997,661],{"class":660},[588,1999,1084],{"class":660},[588,2001,1097],{"class":598},[588,2003,1090],{"class":660},[588,2005,777],{"class":660},[588,2007,1084],{"class":660},[588,2009,1106],{"class":598},[588,2011,1090],{"class":660},[588,2013,1111],{"class":660},[588,2015,2016,2018,2020,2022,2024,2026,2028,2030,2032,2034,2036,2038,2040,2042,2044,2046,2048],{"class":590,"line":1192},[588,2017,1072],{"class":660},[588,2019,765],{"class":660},[588,2021,1077],{"class":598},[588,2023,765],{"class":660},[588,2025,777],{"class":660},[588,2027,1084],{"class":660},[588,2029,1129],{"class":598},[588,2031,1090],{"class":660},[588,2033,661],{"class":660},[588,2035,1084],{"class":660},[588,2037,1097],{"class":598},[588,2039,1090],{"class":660},[588,2041,777],{"class":660},[588,2043,1084],{"class":660},[588,2045,1146],{"class":598},[588,2047,1090],{"class":660},[588,2049,1111],{"class":660},[588,2051,2052,2054,2056,2058,2060,2062,2064,2066,2068,2070,2072,2074,2076,2078,2080,2082,2084],{"class":590,"line":1232},[588,2053,1072],{"class":660},[588,2055,765],{"class":660},[588,2057,1077],{"class":598},[588,2059,765],{"class":660},[588,2061,777],{"class":660},[588,2063,1084],{"class":660},[588,2065,1168],{"class":598},[588,2067,1090],{"class":660},[588,2069,661],{"class":660},[588,2071,1084],{"class":660},[588,2073,1097],{"class":598},[588,2075,1090],{"class":660},[588,2077,777],{"class":660},[588,2079,1084],{"class":660},[588,2081,1185],{"class":598},[588,2083,1090],{"class":660},[588,2085,1111],{"class":660},[588,2087,2088,2090,2092,2094,2096,2098,2100,2102,2104,2106,2108,2110,2112,2114,2116,2118,2120],{"class":590,"line":1238},[588,2089,1072],{"class":660},[588,2091,765],{"class":660},[588,2093,1077],{"class":598},[588,2095,765],{"class":660},[588,2097,777],{"class":660},[588,2099,1084],{"class":660},[588,2101,1207],{"class":598},[588,2103,1090],{"class":660},[588,2105,661],{"class":660},[588,2107,1084],{"class":660},[588,2109,1097],{"class":598},[588,2111,1090],{"class":660},[588,2113,777],{"class":660},[588,2115,1084],{"class":660},[588,2117,1224],{"class":598},[588,2119,1090],{"class":660},[588,2121,1229],{"class":660},[588,2123,2124],{"class":590,"line":1282},[588,2125,2126],{"class":660},"    ])\n",[588,2128,2129,2131,2133,2135],{"class":590,"line":1296},[588,2130,1299],{"class":895},[588,2132,729],{"class":660},[588,2134,1319],{"class":895},[588,2136,1001],{"class":660},[588,2138,2139,2141,2143,2145,2147,2149,2151,2153,2155,2157,2159,2161],{"class":590,"line":1332},[588,2140,1299],{"class":895},[588,2142,729],{"class":660},[588,2144,1304],{"class":722},[588,2146,1307],{"class":598},[588,2148,1311],{"class":1310},[588,2150,1314],{"class":895},[588,2152,729],{"class":660},[588,2154,1319],{"class":895},[588,2156,349],{"class":660},[588,2158,1324],{"class":1310},[588,2160,1327],{"class":598},[588,2162,1001],{"class":660},[588,2164,2165],{"class":590,"line":1337},[588,2166,711],{"emptyLinePlaceholder":30},[588,2168,2169],{"class":590,"line":1343},[588,2170,1340],{"class":746},[588,2172,2173,2175,2177,2179,2181,2183,2185,2187,2189,2191,2193,2195,2197,2199,2201,2203,2205,2207,2209,2211,2213,2215,2217,2219],{"class":590,"line":1404},[588,2174,1346],{"class":650},[588,2176,661],{"class":660},[588,2178,1351],{"class":650},[588,2180,756],{"class":660},[588,2182,1627],{"class":650},[588,2184,451],{"class":660},[588,2186,1360],{"class":895},[588,2188,729],{"class":660},[588,2190,1365],{"class":895},[588,2192,729],{"class":660},[588,2194,1370],{"class":901},[588,2196,756],{"class":660},[588,2198,1375],{"class":1310},[588,2200,661],{"class":660},[588,2202,1380],{"class":901},[588,2204,756],{"class":660},[588,2206,1385],{"class":1310},[588,2208,1388],{"class":660},[588,2210,1391],{"class":901},[588,2212,756],{"class":660},[588,2214,765],{"class":660},[588,2216,1106],{"class":598},[588,2218,765],{"class":660},[588,2220,1001],{"class":660},[588,2222,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253],{"class":590,"line":1444},[588,2224,1299],{"class":895},[588,2226,729],{"class":660},[588,2228,1304],{"class":722},[588,2230,1413],{"class":598},[588,2232,1311],{"class":1310},[588,2234,1314],{"class":895},[588,2236,729],{"class":660},[588,2238,1422],{"class":895},[588,2240,349],{"class":660},[588,2242,1324],{"class":1310},[588,2244,1429],{"class":598},[588,2246,1311],{"class":1310},[588,2248,1434],{"class":895},[588,2250,1324],{"class":1310},[588,2252,1439],{"class":598},[588,2254,1001],{"class":660},[588,2256,2257],{"class":590,"line":1449},[588,2258,711],{"emptyLinePlaceholder":30},[588,2260,2261],{"class":590,"line":1455},[588,2262,1452],{"class":746},[588,2264,2265,2267,2269,2271,2273,2275,2277,2279,2281,2283,2285,2287,2289,2291],{"class":590,"line":1492},[588,2266,1458],{"class":650},[588,2268,756],{"class":660},[588,2270,1627],{"class":650},[588,2272,451],{"class":660},[588,2274,1467],{"class":895},[588,2276,1254],{"class":660},[588,2278,1472],{"class":895},[588,2280,451],{"class":660},[588,2282,1477],{"class":832},[588,2284,1267],{"class":646},[588,2286,1482],{"class":895},[588,2288,1273],{"class":646},[588,2290,1487],{"class":895},[588,2292,1279],{"class":660},[588,2294,2295,2297,2299,2301,2303,2305,2307,2309,2311,2313,2315,2317,2319,2321,2323,2325],{"class":590,"line":1529},[588,2296,1299],{"class":895},[588,2298,729],{"class":660},[588,2300,1304],{"class":722},[588,2302,1501],{"class":598},[588,2304,1311],{"class":1310},[588,2306,1314],{"class":895},[588,2308,729],{"class":660},[588,2310,1510],{"class":895},[588,2312,349],{"class":660},[588,2314,1324],{"class":1310},[588,2316,1429],{"class":598},[588,2318,1311],{"class":1310},[588,2320,1434],{"class":895},[588,2322,1324],{"class":1310},[588,2324,1439],{"class":598},[588,2326,1001],{"class":660},[588,2328,2329],{"class":590,"line":1534},[588,2330,711],{"emptyLinePlaceholder":30},[588,2332,2333],{"class":590,"line":1540},[588,2334,1537],{"class":746},[588,2336,2337,2339,2341,2343,2345,2347],{"class":590,"line":1557},[588,2338,1543],{"class":650},[588,2340,756],{"class":660},[588,2342,1627],{"class":650},[588,2344,451],{"class":660},[588,2346,1552],{"class":895},[588,2348,1293],{"class":660},[588,2350,2352,2354,2356,2358,2360,2362,2364,2366,2368],{"class":590,"line":2351},49,[588,2353,1299],{"class":895},[588,2355,729],{"class":660},[588,2357,1304],{"class":722},[588,2359,1566],{"class":598},[588,2361,1311],{"class":1310},[588,2363,1571],{"class":895},[588,2365,1324],{"class":1310},[588,2367,1576],{"class":598},[588,2369,1001],{"class":660},[574,2371,2373],{"id":2372},"web-frameworks","Web Frameworks",[57,2375,2376],{},"Advanced Alchemy works with nearly all Python web frameworks.\nSeveral helpers for popular libraries are included, and additional PRs to support others are welcomed.",[2378,2379,2381],"h4",{"id":2380},"litestar","Litestar",[57,2383,2384],{},"Advanced Alchemy is the official SQLAlchemy integration for Litestar.",[57,2386,2387,2388,2391,2392,451],{},"In addition to installing with ",[307,2389,2390],{},"pip install advanced-alchemy",",\nit can also be installed as a Litestar extra with ",[307,2393,2394],{},"pip install litestar[sqlalchemy]",[629,2396,2397,2400],{},[632,2398,2399],{},"Litestar Example",[579,2401,2403],{"className":637,"code":2402,"language":639,"meta":584,"style":584},"from litestar import Litestar\nfrom litestar.plugins.sqlalchemy import SQLAlchemyPlugin, SQLAlchemyAsyncConfig\n# alternately...\n# from advanced_alchemy.extensions.litestar import SQLAlchemyAsyncConfig, SQLAlchemyPlugin\n\nalchemy = SQLAlchemyPlugin(\n  config=SQLAlchemyAsyncConfig(connection_string=\"sqlite+aiosqlite:\u002F\u002F\u002Ftest.sqlite\"),\n)\napp = Litestar(plugins=[alchemy])\n",[307,2404,2405,2417,2444,2449,2454,2458,2470,2496,2500],{"__ignoreMap":584},[588,2406,2407,2409,2412,2414],{"class":590,"line":591},[588,2408,647],{"class":646},[588,2410,2411],{"class":650}," litestar ",[588,2413,654],{"class":646},[588,2415,2416],{"class":650}," Litestar\n",[588,2418,2419,2421,2424,2426,2429,2431,2434,2436,2439,2441],{"class":590,"line":672},[588,2420,647],{"class":646},[588,2422,2423],{"class":650}," litestar",[588,2425,451],{"class":660},[588,2427,2428],{"class":650},"plugins",[588,2430,451],{"class":660},[588,2432,2433],{"class":650},"sqlalchemy ",[588,2435,654],{"class":646},[588,2437,2438],{"class":650}," SQLAlchemyPlugin",[588,2440,661],{"class":660},[588,2442,2443],{"class":650}," SQLAlchemyAsyncConfig\n",[588,2445,2446],{"class":590,"line":685},[588,2447,2448],{"class":746},"# alternately...\n",[588,2450,2451],{"class":590,"line":708},[588,2452,2453],{"class":746},"# from advanced_alchemy.extensions.litestar import SQLAlchemyAsyncConfig, SQLAlchemyPlugin\n",[588,2455,2456],{"class":590,"line":714},[588,2457,711],{"emptyLinePlaceholder":30},[588,2459,2460,2463,2465,2467],{"class":590,"line":719},[588,2461,2462],{"class":650},"alchemy ",[588,2464,756],{"class":660},[588,2466,2438],{"class":895},[588,2468,2469],{"class":660},"(\n",[588,2471,2472,2475,2477,2480,2482,2484,2486,2488,2491,2493],{"class":590,"line":743},[588,2473,2474],{"class":901},"  config",[588,2476,756],{"class":660},[588,2478,2479],{"class":895},"SQLAlchemyAsyncConfig",[588,2481,729],{"class":660},[588,2483,902],{"class":901},[588,2485,756],{"class":660},[588,2487,765],{"class":660},[588,2489,2490],{"class":598},"sqlite+aiosqlite:\u002F\u002F\u002Ftest.sqlite",[588,2492,765],{"class":660},[588,2494,2495],{"class":660},"),\n",[588,2497,2498],{"class":590,"line":750},[588,2499,1001],{"class":660},[588,2501,2502,2505,2507,2510,2512,2514,2517,2520],{"class":590,"line":771},[588,2503,2504],{"class":650},"app ",[588,2506,756],{"class":660},[588,2508,2509],{"class":895}," Litestar",[588,2511,729],{"class":660},[588,2513,2428],{"class":901},[588,2515,2516],{"class":660},"=[",[588,2518,2519],{"class":895},"alchemy",[588,2521,1279],{"class":660},[57,2523,2524,2525],{},"For a full Litestar example, check ",[111,2526,1586],{"href":2527,"rel":2528},"https:\u002F\u002Fgithub.com\u002Flitestar-org\u002Fadvanced-alchemy\u002Fblob\u002Fmain\u002Fexamples\u002Flitestar\u002Flitestar_service.py",[115],[2378,2530,2532],{"id":2531},"flask","Flask",[629,2534,2535,2538],{},[632,2536,2537],{},"Flask Example",[579,2539,2541],{"className":637,"code":2540,"language":639,"meta":584,"style":584},"from flask import Flask\nfrom advanced_alchemy.extensions.flask import AdvancedAlchemy, SQLAlchemySyncConfig\n\napp = Flask(__name__)\nalchemy = AdvancedAlchemy(\n    config=SQLAlchemySyncConfig(connection_string=\"duckdb:\u002F\u002F\u002F:memory:\"), app=app,\n)\n",[307,2542,2543,2555,2582,2586,2602,2612,2646],{"__ignoreMap":584},[588,2544,2545,2547,2550,2552],{"class":590,"line":591},[588,2546,647],{"class":646},[588,2548,2549],{"class":650}," flask ",[588,2551,654],{"class":646},[588,2553,2554],{"class":650}," Flask\n",[588,2556,2557,2559,2562,2564,2567,2569,2572,2574,2577,2579],{"class":590,"line":672},[588,2558,647],{"class":646},[588,2560,2561],{"class":650}," advanced_alchemy",[588,2563,451],{"class":660},[588,2565,2566],{"class":650},"extensions",[588,2568,451],{"class":660},[588,2570,2571],{"class":650},"flask ",[588,2573,654],{"class":646},[588,2575,2576],{"class":650}," AdvancedAlchemy",[588,2578,661],{"class":660},[588,2580,2581],{"class":650}," SQLAlchemySyncConfig\n",[588,2583,2584],{"class":590,"line":685},[588,2585,711],{"emptyLinePlaceholder":30},[588,2587,2588,2590,2592,2595,2597,2600],{"class":590,"line":708},[588,2589,2504],{"class":650},[588,2591,756],{"class":660},[588,2593,2594],{"class":895}," Flask",[588,2596,729],{"class":660},[588,2598,2599],{"class":650},"__name__",[588,2601,1001],{"class":660},[588,2603,2604,2606,2608,2610],{"class":590,"line":714},[588,2605,2462],{"class":650},[588,2607,756],{"class":660},[588,2609,2576],{"class":895},[588,2611,2469],{"class":660},[588,2613,2614,2617,2619,2621,2623,2625,2627,2629,2631,2633,2635,2638,2640,2643],{"class":590,"line":719},[588,2615,2616],{"class":901},"    config",[588,2618,756],{"class":660},[588,2620,896],{"class":895},[588,2622,729],{"class":660},[588,2624,902],{"class":901},[588,2626,756],{"class":660},[588,2628,765],{"class":660},[588,2630,909],{"class":598},[588,2632,765],{"class":660},[588,2634,1388],{"class":660},[588,2636,2637],{"class":901}," app",[588,2639,756],{"class":660},[588,2641,2642],{"class":895},"app",[588,2644,2645],{"class":660},",\n",[588,2647,2648],{"class":590,"line":743},[588,2649,1001],{"class":660},[57,2651,2652,2653],{},"For a full Flask example, see ",[111,2654,1586],{"href":2655,"rel":2656},"https:\u002F\u002Fgithub.com\u002Flitestar-org\u002Fadvanced-alchemy\u002Fblob\u002Fmain\u002Fexamples\u002Fflask\u002Fflask_services.py",[115],[2378,2658,2660],{"id":2659},"fastapi","FastAPI",[629,2662,2663,2666],{},[632,2664,2665],{},"FastAPI Example",[579,2667,2669],{"className":637,"code":2668,"language":639,"meta":584,"style":584},"from advanced_alchemy.extensions.fastapi import AdvancedAlchemy, SQLAlchemyAsyncConfig\nfrom fastapi import FastAPI\n\napp = FastAPI()\nalchemy = AdvancedAlchemy(\n    config=SQLAlchemyAsyncConfig(connection_string=\"sqlite+aiosqlite:\u002F\u002F\u002Ftest.sqlite\"), app=app,\n)\n",[307,2670,2671,2694,2706,2710,2721,2731,2761],{"__ignoreMap":584},[588,2672,2673,2675,2677,2679,2681,2683,2686,2688,2690,2692],{"class":590,"line":591},[588,2674,647],{"class":646},[588,2676,2561],{"class":650},[588,2678,451],{"class":660},[588,2680,2566],{"class":650},[588,2682,451],{"class":660},[588,2684,2685],{"class":650},"fastapi ",[588,2687,654],{"class":646},[588,2689,2576],{"class":650},[588,2691,661],{"class":660},[588,2693,2443],{"class":650},[588,2695,2696,2698,2701,2703],{"class":590,"line":672},[588,2697,647],{"class":646},[588,2699,2700],{"class":650}," fastapi ",[588,2702,654],{"class":646},[588,2704,2705],{"class":650}," FastAPI\n",[588,2707,2708],{"class":590,"line":685},[588,2709,711],{"emptyLinePlaceholder":30},[588,2711,2712,2714,2716,2719],{"class":590,"line":708},[588,2713,2504],{"class":650},[588,2715,756],{"class":660},[588,2717,2718],{"class":895}," FastAPI",[588,2720,1293],{"class":660},[588,2722,2723,2725,2727,2729],{"class":590,"line":714},[588,2724,2462],{"class":650},[588,2726,756],{"class":660},[588,2728,2576],{"class":895},[588,2730,2469],{"class":660},[588,2732,2733,2735,2737,2739,2741,2743,2745,2747,2749,2751,2753,2755,2757,2759],{"class":590,"line":719},[588,2734,2616],{"class":901},[588,2736,756],{"class":660},[588,2738,2479],{"class":895},[588,2740,729],{"class":660},[588,2742,902],{"class":901},[588,2744,756],{"class":660},[588,2746,765],{"class":660},[588,2748,2490],{"class":598},[588,2750,765],{"class":660},[588,2752,1388],{"class":660},[588,2754,2637],{"class":901},[588,2756,756],{"class":660},[588,2758,2642],{"class":895},[588,2760,2645],{"class":660},[588,2762,2763],{"class":590,"line":743},[588,2764,1001],{"class":660},[57,2766,2767,2768],{},"For a full FastAPI example with optional CLI integration, see ",[111,2769,1586],{"href":2770,"rel":2771},"https:\u002F\u002Fgithub.com\u002Flitestar-org\u002Fadvanced-alchemy\u002Fblob\u002Fmain\u002Fexamples\u002Ffastapi\u002Ffastapi_service.py",[115],[2378,2773,2775],{"id":2774},"starlette","Starlette",[629,2777,2778,2781],{},[632,2779,2780],{},"Pre-built Example Apps",[579,2782,2784],{"className":637,"code":2783,"language":639,"meta":584,"style":584},"from advanced_alchemy.extensions.starlette import AdvancedAlchemy, SQLAlchemyAsyncConfig\nfrom starlette.applications import Starlette\n\napp = Starlette()\nalchemy = AdvancedAlchemy(\n    config=SQLAlchemyAsyncConfig(connection_string=\"sqlite+aiosqlite:\u002F\u002F\u002Ftest.sqlite\"), app=app,\n)\n",[307,2785,2786,2809,2826,2830,2841,2851,2881],{"__ignoreMap":584},[588,2787,2788,2790,2792,2794,2796,2798,2801,2803,2805,2807],{"class":590,"line":591},[588,2789,647],{"class":646},[588,2791,2561],{"class":650},[588,2793,451],{"class":660},[588,2795,2566],{"class":650},[588,2797,451],{"class":660},[588,2799,2800],{"class":650},"starlette ",[588,2802,654],{"class":646},[588,2804,2576],{"class":650},[588,2806,661],{"class":660},[588,2808,2443],{"class":650},[588,2810,2811,2813,2816,2818,2821,2823],{"class":590,"line":672},[588,2812,647],{"class":646},[588,2814,2815],{"class":650}," starlette",[588,2817,451],{"class":660},[588,2819,2820],{"class":650},"applications ",[588,2822,654],{"class":646},[588,2824,2825],{"class":650}," Starlette\n",[588,2827,2828],{"class":590,"line":685},[588,2829,711],{"emptyLinePlaceholder":30},[588,2831,2832,2834,2836,2839],{"class":590,"line":708},[588,2833,2504],{"class":650},[588,2835,756],{"class":660},[588,2837,2838],{"class":895}," Starlette",[588,2840,1293],{"class":660},[588,2842,2843,2845,2847,2849],{"class":590,"line":714},[588,2844,2462],{"class":650},[588,2846,756],{"class":660},[588,2848,2576],{"class":895},[588,2850,2469],{"class":660},[588,2852,2853,2855,2857,2859,2861,2863,2865,2867,2869,2871,2873,2875,2877,2879],{"class":590,"line":719},[588,2854,2616],{"class":901},[588,2856,756],{"class":660},[588,2858,2479],{"class":895},[588,2860,729],{"class":660},[588,2862,902],{"class":901},[588,2864,756],{"class":660},[588,2866,765],{"class":660},[588,2868,2490],{"class":598},[588,2870,765],{"class":660},[588,2872,1388],{"class":660},[588,2874,2637],{"class":901},[588,2876,756],{"class":660},[588,2878,2642],{"class":895},[588,2880,2645],{"class":660},[588,2882,2883],{"class":590,"line":743},[588,2884,1001],{"class":660},[2378,2886,2888],{"id":2887},"sanic","Sanic",[629,2890,2891,2893],{},[632,2892,2780],{},[579,2894,2896],{"className":637,"code":2895,"language":639,"meta":584,"style":584},"from sanic import Sanic\nfrom sanic_ext import Extend\n\nfrom advanced_alchemy.extensions.sanic import AdvancedAlchemy, SQLAlchemyAsyncConfig\n\napp = Sanic(\"AlchemySanicApp\")\nalchemy = AdvancedAlchemy(\n    sqlalchemy_config=SQLAlchemyAsyncConfig(connection_string=\"sqlite+aiosqlite:\u002F\u002F\u002Ftest.sqlite\"),\n)\nExtend.register(alchemy)\n",[307,2897,2898,2910,2922,2926,2949,2953,2973,2983,3006,3010],{"__ignoreMap":584},[588,2899,2900,2902,2905,2907],{"class":590,"line":591},[588,2901,647],{"class":646},[588,2903,2904],{"class":650}," sanic ",[588,2906,654],{"class":646},[588,2908,2909],{"class":650}," Sanic\n",[588,2911,2912,2914,2917,2919],{"class":590,"line":672},[588,2913,647],{"class":646},[588,2915,2916],{"class":650}," sanic_ext ",[588,2918,654],{"class":646},[588,2920,2921],{"class":650}," Extend\n",[588,2923,2924],{"class":590,"line":685},[588,2925,711],{"emptyLinePlaceholder":30},[588,2927,2928,2930,2932,2934,2936,2938,2941,2943,2945,2947],{"class":590,"line":708},[588,2929,647],{"class":646},[588,2931,2561],{"class":650},[588,2933,451],{"class":660},[588,2935,2566],{"class":650},[588,2937,451],{"class":660},[588,2939,2940],{"class":650},"sanic ",[588,2942,654],{"class":646},[588,2944,2576],{"class":650},[588,2946,661],{"class":660},[588,2948,2443],{"class":650},[588,2950,2951],{"class":590,"line":714},[588,2952,711],{"emptyLinePlaceholder":30},[588,2954,2955,2957,2959,2962,2964,2966,2969,2971],{"class":590,"line":719},[588,2956,2504],{"class":650},[588,2958,756],{"class":660},[588,2960,2961],{"class":895}," Sanic",[588,2963,729],{"class":660},[588,2965,765],{"class":660},[588,2967,2968],{"class":598},"AlchemySanicApp",[588,2970,765],{"class":660},[588,2972,1001],{"class":660},[588,2974,2975,2977,2979,2981],{"class":590,"line":743},[588,2976,2462],{"class":650},[588,2978,756],{"class":660},[588,2980,2576],{"class":895},[588,2982,2469],{"class":660},[588,2984,2985,2988,2990,2992,2994,2996,2998,3000,3002,3004],{"class":590,"line":750},[588,2986,2987],{"class":901},"    sqlalchemy_config",[588,2989,756],{"class":660},[588,2991,2479],{"class":895},[588,2993,729],{"class":660},[588,2995,902],{"class":901},[588,2997,756],{"class":660},[588,2999,765],{"class":660},[588,3001,2490],{"class":598},[588,3003,765],{"class":660},[588,3005,2495],{"class":660},[588,3007,3008],{"class":590,"line":771},[588,3009,1001],{"class":660},[588,3011,3012,3015,3017,3020,3022,3024],{"class":590,"line":791},[588,3013,3014],{"class":650},"Extend",[588,3016,451],{"class":660},[588,3018,3019],{"class":895},"register",[588,3021,729],{"class":660},[588,3023,2519],{"class":895},[588,3025,1001],{"class":660},[275,3027,3029],{"id":3028},"contributing","Contributing",[57,3031,3032,3033,3038],{},"All ",[111,3034,3037],{"href":3035,"rel":3036},"https:\u002F\u002Fgithub.com\u002Flitestar-org",[115],"Litestar Organization"," projects will always be a community-centered, available for contributions of any size.",[57,3040,3041,3042,451],{},"Before contributing, please review the ",[111,3043,3046],{"href":3044,"rel":3045},"https:\u002F\u002Fadvanced-alchemy.litestar.dev\u002Flatest\u002Fcontribution-guide.html",[115],"contribution guide",[57,3048,3049,3050,3053,3054,3059,3060,451],{},"If you have any questions, reach out to us on ",[111,3051,217],{"href":213,"rel":3052},[115],", our org-wide ",[111,3055,3058],{"href":3056,"rel":3057},"https:\u002F\u002Fgithub.com\u002Forgs\u002Flitestar-org\u002Fdiscussions",[115],"GitHub discussions"," page,\nor the ",[111,3061,3064],{"href":3062,"rel":3063},"https:\u002F\u002Fgithub.com\u002Flitestar-org\u002Fadvanced-alchemy\u002Fdiscussions",[115],"project-specific GitHub discussions page",[3066,3067],"hr",{},[57,3069,60,60,3070,60,3082,3084,3085,3087],{"align":59},[62,3071,64,3072,64,3075,64,3078,60],{},[66,3073],{"media":68,"srcSet":3074},"https:\u002F\u002Fraw.githubusercontent.com\u002Flitestar-org\u002Fbranding\u002Fmain\u002Fassets\u002FBranding%20-%20SVG%20-%20Transparent\u002FOrganization%20Project%20-%20Banner%20-%20Inline%20-%20Dark.svg",[66,3076],{"media":72,"srcSet":3077},"https:\u002F\u002Fraw.githubusercontent.com\u002Flitestar-org\u002Fbranding\u002Fmain\u002Fassets\u002FBranding%20-%20SVG%20-%20Transparent\u002FOrganization%20Project%20-%20Banner%20-%20Inline%20-%20Light.svg",[75,3079],{"alt":3080,"src":3077,"width":3081,"height":79},"Litestar Organization Project","40%",[612,3083],{},"An official ",[111,3086,3037],{"href":3035}," Project\n  ",[3089,3090,3091],"style",{},"html pre.shiki code .s52Pk, html code.shiki .s52Pk{--shiki-light:#E2931D;--shiki-default:#E2931D;--shiki-dark:#FFCB6B}html pre.shiki code .sGFVr, html code.shiki .sGFVr{--shiki-light:#91B859;--shiki-default:#91B859;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s8R28, html code.shiki .s8R28{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#39ADB5;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sZSNi, html code.shiki .sZSNi{--shiki-light:#90A4AE;--shiki-default:#90A4AE;--shiki-dark:#BABED8}html pre.shiki code .sDfIl, html code.shiki .sDfIl{--shiki-light:#39ADB5;--shiki-default:#39ADB5;--shiki-dark:#89DDFF}html pre.shiki code .smZ93, html code.shiki .smZ93{--shiki-light:#9C3EDA;--shiki-default:#9C3EDA;--shiki-dark:#C792EA}html pre.shiki code .sWuyu, html code.shiki .sWuyu{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#90A4AE;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sRlkE, html code.shiki .sRlkE{--shiki-light:#E53935;--shiki-default:#E53935;--shiki-dark:#F07178}html pre.shiki code .s3cPz, html code.shiki .s3cPz{--shiki-light:#6182B8;--shiki-default:#6182B8;--shiki-dark:#82AAFF}html pre.shiki code .s1nJG, html code.shiki .s1nJG{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#90A4AE;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sYRBq, html code.shiki .sYRBq{--shiki-light:#F76D47;--shiki-default:#F76D47;--shiki-dark:#F78C6C}",{"title":584,"searchDepth":672,"depth":672,"links":3093},[3094,3095,3101],{"id":277,"depth":672,"text":278},{"id":571,"depth":672,"text":572,"children":3096},[3097,3098,3099,3100],{"id":576,"depth":685,"text":577},{"id":623,"depth":685,"text":624},{"id":1589,"depth":685,"text":1590},{"id":2372,"depth":685,"text":2373},{"id":3028,"depth":672,"text":3029},"readmes\u002Fadvanced-alchemy","Blz5imuaAkyRvrDM_ftxXXMI0jpe0dGgMXZ8EBBlKag",1785155663549]