- 欢迎来到 GINO 的文档
- 上手教程
- 进阶用法
- 原理说明
- 参考手册
- API 参考
- gino.bakery module
- gino.api module
- gino.declarative module
- gino.schema module
- gino.crud module
- gino.json_support module
- gino.engine module
- gino.loader module
- gino.dialects.asyncpg module
- gino.dialects.base module
- gino.transaction module
- gino.dialects package
- gino.dialects.aiomysql module
- gino.ext package
- gino.aiocontextvars module
- gino.exceptions module
- gino.strategies module
- 扩展
- 版本历史
- API 参考
gino.loader module
- class
gino.loader.
AliasLoader
(alias, *columns, **extras)¶ The same as
ModelLoader
, kept for compatibility.
- class
gino.loader.
CallableLoader
(func)¶ Load the row by calling a specified function.
- 参数
func -- A
callable()
taking 2 positional arguments(row, context)
that will be called indo_load()
, returning the loaded result.
- class
gino.loader.
ColumnLoader
(column)¶ Load a given column in the row.
do_load
(row, context)¶Interface used by GINO to run the loader.
- 参数
row -- A
RowProxy
instance.context -- Not used.
- 返回
The value of the specified column, followed by
True
.
- class
gino.loader.
Loader
¶ 基类:
object
The abstract base class of loaders.
Loaders are used to load raw database rows into expected results.
GinoEngine
will use the loader set on theloader
value of theexecution_options()
, for example:from sqlalchemy import text, create_engine from gino.loader import ColumnLoader e = await create_engine("postgresql://localhost/gino", strategy="gino") q = text("SELECT now() as ts") loader = ColumnLoader("ts") ts = await e.first(q.execution_options(loader=loader)) # datetime
do_load
(row, context)¶Interface used by GINO to run the loader.
Must be implemented in subclasses.
- 参数
row -- A
RowProxy
instance.context -- A
dict
that is reused across all loaders in one query.
- 返回
Any result that the loader is supposed to return, followed by a boolean value indicating if the result is distinct.
- classmethod
get
(value)¶ Automatically create a loader based on the type of the given value.
value type
loader type
as is
any other types
- 参数
value -- Any supported value above.
- 返回
A loader instance.
get_columns
()¶Generate a list of selectables from this loader.
This is an experimental feature, this method is supposed to be called by
query
.- 返回
A
list
of SQLAlchemy selectables.
get_from
()¶Generate a clause to be used in
select_from()
from this loader.This is an experimental feature, this method is supposed to be called by
query
.- 返回
A
FromClause
instance, orNone
.
- property
query
¶ Generate a query from this loader.
This is an experimental feature, not all loaders support this.
- 返回
A query instance with the
loader
execution option set to self.
- class
gino.loader.
ModelLoader
(model, *columns, **extras)¶ A loader that loads a row into a GINO model instance.
This loader generates an instance of the given
model
type and fills the instance with attributes according to the other given parameters:Load each column attribute listed in the given
columns
positional arguments.If
columns
is not given, all defined columns of themodel
will be loaded.For each keyword argument, its value will be used to generate a loader using
Loader.get()
, and the loaded value will besetattr()
to the model instance under the name of the key.
For example, the simplest select and load:
sqlalchemy.select([User]).execution_options(loader=ModelLoader(User))
Select only the name column, and still load it into model instances:
sqlalchemy.select( [User.name] ).execution_options( loader=ModelLoader(User, User.name) )
This would also yield
User
instances, with all column attributes asNone
butname
.Nest a
ValueLoader
:sqlalchemy.select( [User.name] ).execution_options( loader=ModelLoader(User, id=1) )
1
is then converted into aValueLoader
and mocked theid
attribute of all returnedUser
instances as1
.Nest another
ModelLoader
:sqlalchemy.select( [user.outerjoin(Company)] ).execution_options( loader=ModelLoader(User, company=Company) )
Likewise,
Company
is converted into aModelLoader
to load theCompany
columns from the joined result, and theCompany
instances are set to thecompany
attribute of eachUser
instance usingsetattr()
.- 参数
distinct
(*columns)¶Configure this loader to reuse instances that have the same values of all the give columns.
- 参数
columns -- Preferably
Column
instances.- 返回
self
for chaining.
do_load
(row, context)¶Interface used by GINO to run the loader.
- 参数
row -- A
RowProxy
instance.context -- A
dict
that is reused across all loaders in one query.
- 返回
The model instance, followed by a boolean value indicating if the result is distinct.
get_columns
()¶Generate a list of selectables from this loader.
This is an experimental feature, this method is supposed to be called by
query
.- 返回
A
list
of SQLAlchemy selectables.
get_from
()¶Generate a clause to be used in
select_from()
from this loader.This is an experimental feature, this method is supposed to be called by
query
.- 返回
A
FromClause
instance, orNone
.
load
(*columns, **extras)¶Update the loader with new rules.
After initialization, the rules of this loader can still be updated. This is useful when using the model class as a shortcut of
ModelLoader
where possible, chaining with aload()
to initialize the rules, for example:sqlalchemy.select( [user.outerjoin(Company)] ).execution_options( loader=ModelLoader(User, company=Company.load('name')) )
- 参数
columns -- If provided, replace the columns to load with the given ones.
extras -- Update the loader with new extras.
- 返回
self
for chaining.
none_as_none
(enabled=True)¶Deprecated method for compatibility, does nothing.
on
(on_clause)¶Specify the
on_clause
for generating joined queries.This is an experimental feature, used by
get_from()
.- 参数
on_clause -- An expression to feed into
join()
.- 返回
self
for chaining.
- class
gino.loader.
TupleLoader
(values)¶ Load multiple values into a tuple.
- 参数
values -- A
tuple
, each item is converted into a loader withLoader.get()
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论