utils¶
Utilities function.
- sqlalchemy_mate.utils.grouper_list(l: Iterable, n: int) Iterable[list] [source]¶
Evenly divide list into fixed-length piece, no filled value if chunk size smaller than fixed-length.
Example:
>>> list(grouper(range(10), n=3) [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]
中文文档
将一个列表按照尺寸n, 依次打包输出, 有多少输出多少, 并不强制填充包的大小到n。
下列实现是按照性能从高到低进行排列的:
方法1: 建立一个counter, 在向chunk中添加元素时, 同时将counter与n比较, 如果一致 则yield。然后在最后将剩余的item视情况yield。
方法2: 建立一个list, 每次添加一个元素, 并检查size。
方法3: 调用grouper()函数, 然后对里面的None元素进行清理。
- sqlalchemy_mate.utils.ensure_session(engine_or_session: Union[sqlalchemy.engine.base.Engine, sqlalchemy.orm.session.Session]) Tuple[sqlalchemy.orm.session.Session, bool] [source]¶
If it is an engine, then create a session from it. And indicate that this session should be closed after the job done.
中文文档
在 ORM 中对数据进行操作主要是通过 Session. 如果传入的参数是 Engine, 则创建一个 Session, 用完之后是要 close 的, 所以
auto_close = True
因为这个 Session 反正是新创建的. 如果传入的参数是 Session, 用完之后是否 close 取决于业务, 所以auto_close = False
.