gpt4 book ai didi

python - sqlalchemy 截断标签

转载 作者:行者123 更新时间:2023-11-30 22:26:57 24 4
gpt4 key购买 nike

我正在尝试将从 sql-alchemy 查询返回的字典传递给扭曲的 Perspective Broker,但出现以下错误:

Unpersistable('Unpersistable data: instance of class sqlalchemy.sql.elements._truncated_label deemed insecure')

在调查时我发现查询返回以下内容:

<class 'sqlalchemy.sql.elements._truncated_label'>对于我的标签

有人可以向我解释如何避免这种情况吗?

这是 Table 之一声明:

module_tbl = Table(
"module",
MetaData(),
Column("id", Integer(), primary_key=True),
Column("name", String()),
Column("description", String()),
Column("context", Integer()),
Column("scope", Integer()),
Column("send_body", Boolean()),
Column("direction", Integer()),
Column("level", Integer()),
Column("incoming_order", Integer()),
Column("outgoing_order", Integer()),
Column("created_at", DateTime()),
Column("updated_at", DateTime()), )

这里是代码错误:

@inlineCallbacks
def get_config(mname, domains, direction):
engine = yield get_default_engine()

# try to retrieve the module database model, raise on fail
mod_tbl = getattr(ddl, mname + '_tbl')
if mod_tbl is None:
raise ModuleBindException('Could not find a database model for module <%s>' % mname)

# convert domains to list
if not isinstance(domains, list):
domains = [domains]

_select = [ddl.domain_module_tbl, ddl.domain_tbl, ddl.module_tbl, mod_tbl]
_from = ddl.domain_module_tbl
_join = [(ddl.domain_tbl, ddl.domain_module_tbl.c.domain_id ==
func.COALESCE(ddl.domain_tbl.c.master_domain_id, ddl.domain_tbl.c.id)),
(mod_tbl, ddl.domain_module_tbl.c.id == mod_tbl.c.domain_module_id),
(ddl.module_tbl, ddl.domain_module_tbl.c.module_id == ddl.module_tbl.c.id), ]
_where = [ddl.domain_module_tbl.c.enabled == 1,
ddl.domain_module_tbl.c.direction.op('&')(direction),
ddl.module_tbl.c.name == mname, # optional but enforces security on blind join
ddl.domain_tbl.c.name.in_(tuple(domains))]

for j in _join:
_from = _from.join(*j)

_stmt = select(_select).select_from(_from)
for w in _where:
_stmt = _stmt.where(w)

# use aliasing
_stmt = _stmt.apply_labels()

# query
result = yield engine.execute(_stmt)
config = yield result.fetchall()
config_per_domain = dict()
mod_prefix = '%s_' % mname
for c in config:
# rename the mod_{name}_* keys to mod_* so it's easier to access from modules
cfg = dict((k, v) for k, v in dict(c).items() if not k.startswith(mod_prefix))
mod_cfg = dict((str('mod_%s' % k[len('%s_' % mname):]), v) for k, v in dict(c).items()
if k.startswith(mod_prefix))
cfg.update(mod_cfg)
config_per_domain[cfg.get('domain_name')] = cfg

defer.returnValue(config_per_domain)

最佳答案

_truncated_labelunicode(或 Python 3 中的 str)的子类。如果您使用的库编写正确,它将使用 isinstance 而不是 type() 来检查某物是否为字符串。

无论如何,这个子类通常用于列、索引和类似数据库对象的名称,当您需要在自己的代码中使用这些名称时,您可以简单地使用 unicode(whatever) 代替只是 whatever 将其转换为普通的 unicode 对象(str 如果您使用的是 Python 3)。

关于python - sqlalchemy 截断标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34919410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com