【发布时间】:2020-11-27 02:20:07
【问题描述】:
我有一个很长的问题。我想在 Python 中将它分成几行。在 JavaScript 中执行此操作的一种方法是使用多个句子并将它们与 + 运算符连接(我知道,也许这不是最有效的方法,但我并不真正关心现阶段的性能,只是代码可读性)。示例:
var long_string = 'some text not important. just garbage to' +
'illustrate my example';
我尝试在 Python 中做类似的事情,但没有成功,所以我使用\ 来拆分长字符串。但是,我不确定这是否是唯一/最好/pythonicest 的方法。看起来很尴尬。
实际代码:
query = 'SELECT action.descr as "action", '\
'role.id as role_id,'\
'role.descr as role'\
'FROM '\
'public.role_action_def,'\
'public.role,'\
'public.record_def, '\
'public.action'\
'WHERE role.id = role_action_def.role_id AND'\
'record_def.id = role_action_def.def_id AND'\
'action.id = role_action_def.action_id AND'\
'role_action_def.account_id = ' + account_id + ' AND'\
'record_def.account_id=' + account_id + ' AND'\
'def_id=' + def_id
【问题讨论】:
-
由于您的示例看起来像一个等待注入攻击的 SQL 块,另一个建议是研究更高级别的 SQL 库,如 SQLAlchemy 或其他东西,以避免像这样将原始 SQL 组合在一起。 (也许题外话,但你确实要求“任何建议”。;)
-
这是“为长字符串创建多行代码的 Pythonic 方式”要创建包含换行符的字符串,请参阅textwrap.dedent。
-
@cezar 我在五年多前写了这个问题,但我记得它源于不知道如何正确地将长 sql 查询放在几行中。我同意我用那个长字符串做了一些愚蠢的事情,但这不是我的问题,而且我不够聪明,无法寻找一个更好的例子来说明它不包括一些 sql 注入问题。
-
@cezar 不,这不是 XY 问题,无论如何最好将查询格式化为多行。 SQLi 与手头的问题无关。然而,大胆的警告是完全合理的:)
-
我为此写了一个小包。此处示例:stackoverflow.com/a/56940938/1842491
标签: python string multiline multilinestring