支持使用sqlalchemy的各种实用函数。
cs.sqlalchemy-utils的Python项目详细描述
最新版本20190830.1: 设置装饰器。模块
支持使用sqlalchemy的各种实用功能。
功能自动会话(func)
decorator在会话中运行一个函数(如果没有预先应用)。
函数func
在事务中运行,
如果会话已存在,则嵌套。
有关详细信息,请参见with_session
。
函数find_json_field(column_value,field_name,*,infll=false)
下降jsunable python对象列值
要字段名
。
返回列值
(可能已填充),最终字段
,最终字段名
这支持json列的数据库行列。
参数:
列值
:列的原始值字段名
:要定位的列中的字段infll
:可选关键字参数,默认值为false
。 如果属实,列值
及其内部将填写为dict
s 允许推迟字段名
字段u name
是一个str
由一个句点('.
)分隔的字段部分序列组成。
每个字段部分都成为索引列映射的键。
这些键被分成前导字段部分
最后一部分,
返回为上面的final_field_name
。
上面的final_字段
返回值
是final_field_value
可能位于其中的映射
其中可以设置final_field_value
。
注意:它可能不存在。
如果缺少前导键且infll
为true
列的相应部分设置为空字典
以便允许延迟前导密钥。
这包括
column_value
本身是none
的情况,
这就是为什么列的值是返回值的一部分。
如果缺少前导键且infll
为false
此函数将引发一个键错误
对于字段名
中失败的部分。
示例:
>>> find_json_field({'a':{'b':{}}}, 'a.b')
({'a': {'b': {}}}, {'b': {}}, 'b')
>>> find_json_field({'a':{}}, 'a.b')
({'a': {}}, {}, 'b')
>>> find_json_field({'a':{'b':{}}}, 'a.b.c.d')
Traceback (most recent call last):
...
KeyError: 'a.b.c'
>>> find_json_field({'a':{'b':{}}}, 'a.b.c.d', infill=True)
({'a': {'b': {'c': {}}}}, {}, 'd')
>>> find_json_field(None, 'a.b.c.d')
Traceback (most recent call last):
...
KeyError: 'a'
>>> find_json_field(None, 'a.b.c.d', infill=True)
({'a': {'b': {'c': {}}}}, {}, 'd')
函数get_json_field(column_value,field_name,*,default=none)
返回字段名的值
如果字段不存在,则返回default。
参数:
列值
:列的原始值字段名
:要定位的列中的字段默认值
:如果字段不存在,则返回默认值, 默认值:无
示例:
>>> get_json_field({'a': 1}, 'a')
1
>>> get_json_field({'b': 1}, 'a')
>>> get_json_field({'a': {}}, 'a.b')
>>> get_json_field({'a': {'b': 2}}, 'a.b')
2
函数json_列(*da,**dkw)
类装饰器,用于在表上声明虚拟列名 值位于表的json列中。
参数:
cls
:要注释的类attr
:作为行属性显示的虚拟列名json\u field\u name
:json列中的字段 用于存储此值, 默认值与attr相同
json_column_name
:关联的json列的名称, 默认'info'
默认值
:getter返回的默认值 如果字段不存在, 默认值无
示例使用:
Base = declarative_base()
...
@json_column('virtual_name', 'json.field.name')
class TableClass(Base):
...
这将使用属性注释类。virtual\u name
属性
可以访问或设置,
访问或修改关联的json列
(在本例中,列info
,
访问info['json']['field']['name']
)。
功能日志级别(*da,**dkw)
decorator在指定的日志级别运行
func
,默认值为logging.debug
类别<化学需氧量e>orm
mro:cs.resources.multiopenmixin
ORM类的方便基类。
这将定义一个.base
属性,该属性是一个新的声明数据库
并提供各种与会话相关的便利方法。
它也是一个multiopenmixin
子类
支持嵌套的打开/关闭序列并用作上下文管理器。
子类必须定义以下内容:
.session
:一个位于自己的工厂,通常是self.session=sessionmaker(bind=engine)
.startup
和.shutdown
方法来支持多openmixin
, 即使这些只是通过
函数orm_auto_session(方法)
decorator在从self.orm
派生的会话中运行方法。
如果一个会话没有被预先应用。
旨在帮助类使用.orm
属性。
有关详细信息,请参见with_session
。
功能推送日志级别(级别)
临时将默认sqlalchemy logger的级别设置为level
。
生成记录器。
注意:这不是mt-safe-竞争线程可以将日志级别混合起来。
函数set_json_field(column_value,field_name,value,*,infll=false)
为列值的
字段名设置一个新的
值。
返回新的
列值
参数:
列值
:列的原始值字段名
:要定位的列中的字段值
:要存储为字段名的值
infll
:可选关键字参数,默认值为false
。 如果属实,列值
及其内部将填写为dict
s 允许推迟字段名
与find_json_field
一样,
一个trueinfl
可以修改列值
以提供字段名
这就是为什么此函数返回新的列值
示例:
>>> set_json_field({'a': 2}, 'a', 3)
{'a': 3}
>>> set_json_field({'a': 2, 'b': {'c': 5}}, 'b.c', 4)
{'a': 2, 'b': {'c': 4}}
>>> set_json_field({'a': 2}, 'b.c', 4)
Traceback (most recent call last):
...
KeyError: 'b'
>>> set_json_field({'a': 2}, 'b.c', 4, infill=True)
{'a': 2, 'b': {'c': 4}}
>>> set_json_field(None, 'b.c', 4, infill=True)
{'b': {'c': 4}}
函数与会话(func,*a,orm=none,session=none,**kw)
调用func(*a,session=session,**kw)
,根据需要创建会话。
函数func
在事务中运行,
如果会话已存在,则嵌套。
这是@auto_session
和
orm.auto\u会话
参数:
函数
:要调用的函数a
:位置参数orm
:带有.session()
上下文管理器方法的可选orm类 例如本模块提供的orm
基类。会话
:可选的现有ORM会话kw
:其他关键字参数,传递给func
orm
或session
中的一个不能none
;如果session
如果none
则从orm.session()
生成一个并用作
上下文管理器。
会话也作为
关键字参数
session
支持嵌套调用。
发布日志
发布日期20190830.1: 设置装饰器。模块
发布日期20190830: @json_列:小的docstring改进。
发布日期20190829: bugfix@json_column setter:将该列标记为orm的已修改列。 新的push_log_级别上下文管理器和@log_级别装饰器,用于临时更改sqlalchemy日志处理程序级别。
发布日期20190812:
使orm成为多openmixin。
get_json_字段:使用忘记的默认值
参数。
其他小改动。
发布日期20190526: 支持映射到json列interio的虚拟列r值: 新函数find_json_field,get_json_field,set_json_field。 用于去极化基表的新decorator@json\u列。
发布日期20190517: 将orm.u会话专用会话工厂设为公共orm.session工厂供外部使用。 与会话:预先存在的会话仍会触发会话。开始嵌套,消除其他地方的刷新/提交张力。
发布日期20190403: 将@orm.orm_auto_会话重命名为@orm.auto_会话。 新的@orm_auto_session decorator,用于具有.orm属性的对象的方法。
发布日期20190319.1: 初次发布。orm基类,@auto_session decorator。