如何将长字符串的定义拆分为多行?

新手上路,请多包涵

我有一个很长的查询。我想在 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

原文由 Pablo Mescher 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 295
2 个回答

你在谈论多行字符串吗?很简单,使用三重引号来开始和结束它们。

 s = """ this is a very
        long string if I had the
        energy to type more and more ..."""

您也可以使用单引号(其中 3 个当然在开头和结尾)并像处理任何其他字符串一样处理生成的字符串 s

注意:与任何字符串一样,起始引号和结束引号之间的任何内容都成为字符串的一部分,因此此示例有一个前导空白(正如@root45 所指出的)。该字符串还将包含空格和换行符。

IE,:

 ' this is a very\n        long string if I had the\n        energy to type more and more ...'

最后,还可以像这样在 Python 中构造长行:

  s = ("this is a very"
      "long string too"
      "for sure ..."
     )

这将 包括任何额外的空格或换行符(这是一个故意的例子,显示跳过空格的结果):

 'this is a verylong string toofor sure ...'

不需要逗号,只需将要连接的字符串放在一对括号中,并确保考虑到任何需要的空格和换行符。

原文由 Levon 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果你不想要多行字符串,而只是有一个很长的单行字符串,你可以使用括号。只要确保您不在字符串段之间包含逗号(那么它将是一个元组)。

 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 查询是一种等待发生的 SQL 注入安全风险,因此请使用数据库的参数化查询功能来防止这种情况发生。但是,我将按原样保留答案,因为它直接回答了所提出的问题。

原文由 Jesse 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题