【问题标题】:Format SQL in a string (in python or any language)将 SQL 格式化为字符串(python 或任何语言)
【发布时间】:2022-02-11 18:23:12
【问题描述】:

是否有一个 cli 工具可用于格式化给定 .py 文件中字符串内的 SQL 代码?示例:

import foo

query = """SELECT please, format, me    

FROM    i-am-an-unformatted-query

"""

some_client.query(query)

例如可以产生

import foo

query = """
SELECT
    please,
    format,
    me    
FROM i-am-an-unformatted-query"""

some_client.query(query)

即,格式化只会出现在查询字符串内。

这样的工具存在吗?曾经我只看过格式化独立文件。我宁愿不与我的同事讨论 SQL 格式化,而是围绕一个工具进行调整,就像我们使用 black 进行 python 格式化一样。

【问题讨论】:

  • 我想你正在寻找这个答案:stackoverflow.com/a/44335609/687896
  • 不是,不是。我想将一个工具指向一个文件,例如一个 python 文件。然后我想格式化该 python 文件中看起来像 sql 查询的任何字符串,并将文件写回。

标签: python sql formatting


【解决方案1】:

根据https://stackoverflow.com/a/44335609/687896的回答,在Python中可以使用包sqlparse

>>> import sqlparse
>>> sql = """SELECT please, format, me    

FROM    i-am-an-unformatted-query

"""

>>> sql_formatted = sqlparse.format(sql, reindent=True, keyword_case='upper')
>>> print(sql_formatted)
SELECT please,
       format,
       me
FROM i-am-an-unformatted-query

【讨论】:

  • 是的,用于格式化给定的字符串,这很好。但我想将该工具指向一个包含 SQL 和 其他代码 的 python(或其他)文件,后者应该保持不变。
【解决方案2】:

我的意思是我可能没有正确回答您的问题,但是,如果您指的是格式化查询,即:根据请求或变量更改它,您可以简单地使用:

print( """
SELECT {},
   format, me    
FROM i-am-an-unformatted-query""",format(please))

并且打印可以放在一个以 please 作为参数的函数中。

【讨论】:

  • 是的,用于格式化给定的字符串,这很好。但我想将该工具指向包含 SQL 和其他代码的 python(或其他)文件,后者应该保持不变。
猜你喜欢
  • 2014-07-10
  • 1970-01-01
  • 2020-06-05
  • 2013-03-31
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多