1

在我的 Python 脚本中,我有一个永远持续下去的 SQL 语句,如下所示:

query = """
    SELECT * FROM
        many_many
        tables
    WHERE
        this = that,
        a_bunch_of = other_conditions
"""

让它像单行一样阅读的最佳方法是什么?我试过这个:

def formattedQuery(query):
    lines = query.split('\n')

    for line in lines:
        line = line.lstrip()
        line = line.rstrip()

    return ' '.join(lines)

它确实删除了换行符,但没有从缩进中删除空格。请帮忙!

4

3 回答 3

5

你可以这样做:

query = " ".join(query.split())

select * from users where name = 'Jura X'但如果您的 SQL 查询包含带有空格或制表符的字符串(例如),它就不会很好地工作。这是使用string.replace正则表达式的其他解决方案的问题。所以你的方法还不错,但你的代码需要修复。

您的函数实际上有什么问题 - 您返回原始值, lsplit 和 rsplit 的返回值被放弃。你可以像这样修复它:

def formattedQuery(query):
  lines = query.split('\n')
  r = []

  for line in lines:
    line = line.lstrip()
    line = line.rstrip()
    r.append(line)

  return ' '.join(r) 

另一种方法:

def formattedQuery(q): return " ".join([s.strip() for s in q.splitlines()])
于 2013-02-07T20:27:25.457 回答
2

另一行:

>>> import re

>>> re.sub(r'\s', ' ', query)

'SELECT * FROM many_many tables WHERE this = that, a_bunch_of = other_conditions'

这会将字符串中的所有空格字符替换query为单个' '空格。

于 2013-02-07T20:34:34.987 回答
0

string.translate 可以删除字符(只需为第二个参数提供 None ,因此它也不会转换字符):

import string
string.translate(query, None, "\n\t")
于 2013-02-07T20:33:26.923 回答