8585 < span class =nb > id</ span > < span class =p > :</ span > < span class =n > model</ span > < span class =o > .</ span > < span class =n > Mapped</ span > < span class =p > [</ span > < span class =nb > int</ span > < span class =p > ]</ span > < span class =o > =</ span > < span class =n > model</ span > < span class =o > .</ span > < span class =n > mapped_column</ span > < span class =p > (</ span > < span class =n > primary_key</ span > < span class =o > =</ span > < span class =kc > True</ span > < span class =p > )</ span >
8686 < span class =n > username</ span > < span class =p > :</ span > < span class =n > model</ span > < span class =o > .</ span > < span class =n > Mapped</ span > < span class =p > [</ span > < span class =nb > str</ span > < span class =p > ]</ span > < span class =o > =</ span > < span class =n > model</ span > < span class =o > .</ span > < span class =n > mapped_column</ span > < span class =p > (</ span > < span class =n > unique</ span > < span class =o > =</ span > < span class =kc > True</ span > < span class =p > )</ span >
8787 < span class =n > full_name</ span > < span class =p > :</ span > < span class =n > model</ span > < span class =o > .</ span > < span class =n > Mapped</ span > < span class =p > [</ span > < span class =nb > str</ span > < span class =p > ]</ span > < span class =o > =</ span > < span class =n > model</ span > < span class =o > .</ span > < span class =n > mapped_column</ span > < span class =p > (</ span > < span class =n > model</ span > < span class =o > .</ span > < span class =n > String</ span > < span class =p > )</ span >
88- </ code > </ pre > </ div > We have created a < code > User</ code > model but the data does not exist. Let's fix that</ p > < div class =highlight > < pre > < span > </ span > < code > < span class =kn > from</ span > < span class =nn > ellar.app </ span > < span class =kn > import</ span > < span class =n > current_injector</ span >
88+ </ code > </ pre > </ div > We have created a < code > User</ code > model but the data does not exist. Let's fix that</ p > < div class =highlight > < pre > < span > </ span > < code > < span class =kn > from</ span > < span class =nn > ellar.core </ span > < span class =kn > import</ span > < span class =n > current_injector</ span >
8989< span class =kn > from</ span > < span class =nn > ellar_sql</ span > < span class =kn > import</ span > < span class =n > EllarSQLService</ span >
9090
9191< span class =n > db_service</ span > < span class =o > =</ span > < span class =n > current_injector</ span > < span class =o > .</ span > < span class =n > get</ span > < span class =p > (</ span > < span class =n > EllarSQLService</ span > < span class =p > )</ span >
141141 < span class =k > return</ span > < span class =n > user</ span > < span class =o > .</ span > < span class =n > dict</ span > < span class =p > ()</ span >
142142</ code > </ pre > </ div > < h2 id =accessing-metadata-and-engines > < strong > Accessing Metadata and Engines</ strong > < a class =headerlink href =#accessing-metadata-and-engines title ="Permanent link "> ¶</ a > </ h2 > < p > In the process of < code > EllarSQLModule</ code > setup, three services are registered to the Ellar IoC container.</ p > < ul > < li > < code > EllarSQLService</ code > : Which manages models, metadata, engines and sessions</ li > < li > < code > Engine</ code > : SQLAlchemy Engine of the default database configuration</ li > < li > < code > Session</ code > SQLAlchemy Session of the default database configuration</ li > </ ul > < p > Although with < code > EllarSQLService</ code > you can get the < code > engine</ code > and < code > session</ code > . It's there for easy of access.</ p > < div class =highlight > < pre > < span > </ span > < code > < span class =kn > import</ span > < span class =nn > sqlalchemy</ span > < span class =k > as</ span > < span class =nn > sa</ span >
143143< span class =kn > import</ span > < span class =nn > sqlalchemy.orm</ span > < span class =k > as</ span > < span class =nn > sa_orm</ span >
144- < span class =kn > from</ span > < span class =nn > ellar.app </ span > < span class =kn > import</ span > < span class =n > current_injector</ span >
144+ < span class =kn > from</ span > < span class =nn > ellar.core </ span > < span class =kn > import</ span > < span class =n > current_injector</ span >
145145< span class =kn > from</ span > < span class =nn > ellar_sql</ span > < span class =kn > import</ span > < span class =n > EllarSQLService</ span >
146146
147147< span class =n > db_service</ span > < span class =o > =</ span > < span class =n > current_injector</ span > < span class =o > .</ span > < span class =n > get</ span > < span class =p > (</ span > < span class =n > EllarSQLService</ span > < span class =p > )</ span >
150150< span class =k > assert</ span > < span class =nb > isinstance</ span > < span class =p > (</ span > < span class =n > db_service</ span > < span class =o > .</ span > < span class =n > session_factory</ span > < span class =p > (),</ span > < span class =n > sa_orm</ span > < span class =o > .</ span > < span class =n > Session</ span > < span class =p > )</ span >
151151</ code > </ pre > </ div > < h4 id =important-constraints > < strong > Important Constraints</ strong > < a class =headerlink href =#important-constraints title ="Permanent link "> ¶</ a > </ h4 > < ul > < li > EllarSQLModule < code > databases</ code > options for < code > SQLAlchemy.ext.asyncio.AsyncEngine</ code > will register < code > SQLAlchemy.ext.asyncio.AsyncEngine</ code > and < code > SQLAlchemy.ext.asyncio.AsyncSession</ code > </ li > < li > EllarSQLModule < code > databases</ code > options for < code > SQLAlchemy.Engine</ code > will register < code > SQLAlchemy.Engine</ code > and < code > SQLAlchemy.orm.Session</ code > .</ li > < li > < code > EllarSQL.get_all_metadata()</ code > retrieves all configured metadatas</ li > < li > < code > EllarSQL.get_metadata()</ code > retrieves metadata by < code > __database__</ code > key or < code > default</ code > is no parameter is passed.</ li > </ ul > < p > < div class =highlight > < pre > < span > </ span > < code > < span class =kn > import</ span > < span class =nn > sqlalchemy</ span > < span class =k > as</ span > < span class =nn > sa</ span >
152152< span class =kn > import</ span > < span class =nn > sqlalchemy.orm</ span > < span class =k > as</ span > < span class =nn > sa_orm</ span >
153- < span class =kn > from</ span > < span class =nn > ellar.app </ span > < span class =kn > import</ span > < span class =n > current_injector</ span >
153+ < span class =kn > from</ span > < span class =nn > ellar.core </ span > < span class =kn > import</ span > < span class =n > current_injector</ span >
154154
155155< span class =c1 > # get engine from DI</ span >
156156< span class =n > default_engine</ span > < span class =o > =</ span > < span class =n > current_injector</ span > < span class =o > .</ span > < span class =n > get</ span > < span class =p > (</ span > < span class =n > sa</ span > < span class =o > .</ span > < span class =n > Engine</ span > < span class =p > )</ span >
161161< span class =k > assert</ span > < span class =nb > isinstance</ span > < span class =p > (</ span > < span class =n > default_engine</ span > < span class =p > ,</ span > < span class =n > sa</ span > < span class =o > .</ span > < span class =n > Engine</ span > < span class =p > )</ span >
162162< span class =k > assert</ span > < span class =nb > isinstance</ span > < span class =p > (</ span > < span class =n > session</ span > < span class =p > ,</ span > < span class =n > sa_orm</ span > < span class =o > .</ span > < span class =n > Session</ span > < span class =p > )</ span >
163163</ code > </ pre > </ div > For Async Database options < div class =highlight > < pre > < span > </ span > < code > < span class =kn > from</ span > < span class =nn > sqlalchemy.ext.asyncio</ span > < span class =kn > import</ span > < span class =n > AsyncSession</ span > < span class =p > ,</ span > < span class =n > AsyncEngine</ span >
164- < span class =kn > from</ span > < span class =nn > ellar.app </ span > < span class =kn > import</ span > < span class =n > current_injector</ span >
164+ < span class =kn > from</ span > < span class =nn > ellar.core </ span > < span class =kn > import</ span > < span class =n > current_injector</ span >
165165
166166< span class =c1 > # get engine from DI</ span >
167167< span class =n > default_engine</ span > < span class =o > =</ span > < span class =n > current_injector</ span > < span class =o > .</ span > < span class =n > get</ span > < span class =p > (</ span > < span class =n > AsyncEngine</ span > < span class =p > )</ span >
171171
172172< span class =k > assert</ span > < span class =nb > isinstance</ span > < span class =p > (</ span > < span class =n > default_engine</ span > < span class =p > ,</ span > < span class =n > AsyncEngine</ span > < span class =p > )</ span >
173173< span class =k > assert</ span > < span class =nb > isinstance</ span > < span class =p > (</ span > < span class =n > session</ span > < span class =p > ,</ span > < span class =n > AsyncSession</ span > < span class =p > )</ span >
174- </ code > </ pre > </ div > </ p > < aside class =md-source-file > < span class =md-source-file__fact > < span class =md-icon title ="Last update "> < svg xmlns =http://www.w3.org/2000/svg viewbox ="0 0 24 24 "> < path d ="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z "/> </ svg > </ span > < span class ="git-revision-date-localized-plugin git-revision-date-localized-plugin-date "> February 26, 2024</ span > </ span > </ aside > </ article > </ div > < script > var target = document . getElementById ( location . hash . slice ( 1 ) ) ; target && target . name && ( target . checked = target . name . startsWith ( "__tabbed_" ) ) </ script > </ div > </ main > < footer class =md-footer > < nav class ="md-footer__inner md-grid " aria-label =Footer > < a href =../overview/configuration/ class ="md-footer__link md-footer__link--prev " aria-label ="Previous: Configuration "> < div class ="md-footer__button md-icon "> < svg xmlns =http://www.w3.org/2000/svg viewbox ="0 0 24 24 "> < path d ="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z "/> </ svg > </ div > < div class =md-footer__title > < span class =md-footer__direction > Previous </ span > < div class =md-ellipsis > Configuration </ div > </ div > </ a > < a href =extra-fields/ class ="md-footer__link md-footer__link--next " aria-label ="Next: Extra Fields "> < div class =md-footer__title > < span class =md-footer__direction > Next </ span > < div class =md-ellipsis > Extra Fields </ div > </ div > < div class ="md-footer__button md-icon "> < svg xmlns =http://www.w3.org/2000/svg viewbox ="0 0 24 24 "> < path d ="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z "/> </ svg > </ div > </ a > </ nav > < div class ="md-footer-meta md-typeset "> < div class ="md-footer-meta__inner md-grid "> < div class =md-copyright > < div class =md-copyright__highlight > Copyright © 2024 < a href =https://github.com/eadwinCode target =_blank rel =noopener > Eadwin Ezeudoh</ a > </ div > Made with < a href =https://squidfunk.github.io/mkdocs-material/ target =_blank rel =noopener > Material for MkDocs </ a > </ div > </ div > </ div > </ footer > </ div > < div class =md-dialog data-md-component =dialog > < div class ="md-dialog__inner md-typeset "> </ div > </ div > < script id =__config type =application/json > { "base" : ".." , "features" : [ "announce.dismiss" , "content.action.edit" , "content.action.view" , "content.code.annotate" , "content.code.copy" , "content.tooltips" , "search.highlight" , "search.share" , "search.suggest" , "toc.follow" , "navigation.footer" , "navigation.indexes" , "navigation.instant" , "navigation.prune" , "navigation.left" , "navigation.tracking" ] , "search" : "../assets/javascripts/workers/search.b8dbb3d2.min.js" , "translations" : { "clipboard.copied" : "Copied to clipboard" , "clipboard.copy" : "Copy to clipboard" , "search.result.more.one" : "1 more on this page" , "search.result.more.other" : "# more on this page" , "search.result.none" : "No matching documents" , "search.result.one" : "1 matching document" , "search.result.other" : "# matching documents" , "search.result.placeholder" : "Type to start searching" , "search.result.term.missing" : "Missing" , "select.version" : "Select version" } } </ script > < script src =../assets/javascripts/bundle.c8d2eff1.min.js > </ script > </ body > </ html >
174+ </ code > </ pre > </ div > </ p > < aside class =md-source-file > < span class =md-source-file__fact > < span class =md-icon title ="Last update "> < svg xmlns =http://www.w3.org/2000/svg viewbox ="0 0 24 24 "> < path d ="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z "/> </ svg > </ span > < span class ="git-revision-date-localized-plugin git-revision-date-localized-plugin-date "> August 21, 2024</ span > </ span > </ aside > </ article > </ div > < script > var target = document . getElementById ( location . hash . slice ( 1 ) ) ; target && target . name && ( target . checked = target . name . startsWith ( "__tabbed_" ) ) </ script > </ div > </ main > < footer class =md-footer > < nav class ="md-footer__inner md-grid " aria-label =Footer > < a href =../overview/configuration/ class ="md-footer__link md-footer__link--prev " aria-label ="Previous: Configuration "> < div class ="md-footer__button md-icon "> < svg xmlns =http://www.w3.org/2000/svg viewbox ="0 0 24 24 "> < path d ="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z "/> </ svg > </ div > < div class =md-footer__title > < span class =md-footer__direction > Previous </ span > < div class =md-ellipsis > Configuration </ div > </ div > </ a > < a href =extra-fields/ class ="md-footer__link md-footer__link--next " aria-label ="Next: Extra Fields "> < div class =md-footer__title > < span class =md-footer__direction > Next </ span > < div class =md-ellipsis > Extra Fields </ div > </ div > < div class ="md-footer__button md-icon "> < svg xmlns =http://www.w3.org/2000/svg viewbox ="0 0 24 24 "> < path d ="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z "/> </ svg > </ div > </ a > </ nav > < div class ="md-footer-meta md-typeset "> < div class ="md-footer-meta__inner md-grid "> < div class =md-copyright > < div class =md-copyright__highlight > Copyright © 2024 < a href =https://github.com/eadwinCode target =_blank rel =noopener > Eadwin Ezeudoh</ a > </ div > Made with < a href =https://squidfunk.github.io/mkdocs-material/ target =_blank rel =noopener > Material for MkDocs </ a > </ div > </ div > </ div > </ footer > </ div > < div class =md-dialog data-md-component =dialog > < div class ="md-dialog__inner md-typeset "> </ div > </ div > < script id =__config type =application/json > { "base" : ".." , "features" : [ "announce.dismiss" , "content.action.edit" , "content.action.view" , "content.code.annotate" , "content.code.copy" , "content.tooltips" , "search.highlight" , "search.share" , "search.suggest" , "toc.follow" , "navigation.footer" , "navigation.indexes" , "navigation.instant" , "navigation.prune" , "navigation.left" , "navigation.tracking" ] , "search" : "../assets/javascripts/workers/search.b8dbb3d2.min.js" , "translations" : { "clipboard.copied" : "Copied to clipboard" , "clipboard.copy" : "Copy to clipboard" , "search.result.more.one" : "1 more on this page" , "search.result.more.other" : "# more on this page" , "search.result.none" : "No matching documents" , "search.result.one" : "1 matching document" , "search.result.other" : "# matching documents" , "search.result.placeholder" : "Type to start searching" , "search.result.term.missing" : "Missing" , "select.version" : "Select version" } } </ script > < script src =../assets/javascripts/bundle.c8d2eff1.min.js > </ script > </ body > </ html >
0 commit comments