我正在尝试找到格式化sql查询字符串的最佳方法。当我调试我的应用程序时,我希望将所有sql查询字符串记录到文件中,并且字符串的格式正确是很重要的。
选项1
def myquery():
sql = "select field1, field2, field3, field4 from table where condition1=1 and condition2=2"
con = mymodule.get_connection()
...
选项2
def query():
sql = """
select field1, field2, field3, field4
from table
where condition1=1
and condition2=2"""
con = mymodule.get_connection()
...
这里的代码是清晰的,但是当你打印查询字符串时,你会得到所有这些讨厌的空格。
U‘\n选择\n_______and condition2=2',field1,field2,field3,condition1=1
注意:我已经用下划线``_替换了空格,因为编辑器会对它们进行修剪
选项3
def query():
sql = """select field1, field2, field3, field4
from table
where condition1=1
and condition2=2"""
con = mymodule.get_connection()
...
选项4
def query():
sql = "select field1, field2, field3, field4 " \
"from table " \
"where condition1=1 " \
"and condition2=2 "
con = mymodule.get_connection()
...
对我来说,最好的解决方案是SQLOption2SQL,但是我不喜欢在打印字符串时出现额外的空格。
你知道还有其他的选择吗?
发布于 2012-02-24 23:42:21
很抱歉在这么老的帖子上发帖--但作为一个同样热衷于pythonic 'best‘的人,我想我应该分享我们的解决方案。
解决方案是使用python的字符串文字连接(http://docs.python.org/)构建SQL语句,它可以限定在选项2和选项4之间的某个位置。
代码示例:
sql = ("SELECT field1, field2, field3, field4 "
"FROM table "
"WHERE condition1=1 "
"AND condition2=2;")
同样适用于f字符串
fields = "field1, field2, field3, field4"
table = "table"
conditions = "condition1=1 AND condition2=2"
sql = (f"SELECT {fields} "
f"FROM {table} "
f"WHERE {conditions};")
优点:
发布于 2011-03-09 17:55:12
显然,您已经考虑了许多方法来编写SQL,使其能够正常打印,但是更改用于调试日志记录的'print‘语句,而不是以您不喜欢的方式编写SQL,怎么样?使用上面你最喜欢的选项,像这样的日志记录函数怎么样:
def debugLogSQL(sql):
print ' '.join([line.strip() for line in sql.splitlines()]).strip()
sql = """
select field1, field2, field3, field4
from table"""
if debug:
debugLogSQL(sql)
如果行的长度超过您的期望长度,这也会使添加额外的逻辑来将记录的字符串拆分到多行中变得很简单。
发布于 2016-01-20 16:29:20
我遇到的最干净的方式是受到sql style guide的启发。
sql = """
SELECT field1, field2, field3, field4
FROM table
WHERE condition1 = 1
AND condition2 = 2;
"""
从本质上讲,子句开头的关键字应该右对齐,字段名等应该左对齐。这看起来非常整洁,也更容易调试。
https://stackoverflow.com/questions/5243596
复制相似问题