【发布时间】:2011-07-11 17:52:27
【问题描述】:
我正在尝试找到格式化 sql 查询字符串的最佳方式。当我调试时 我的应用程序我想记录所有的 sql 查询字符串,它是 字符串格式正确很重要。
选项 1
def myquery():
sql = "select field1, field2, field3, field4 from table where condition1=1 and condition2=2"
con = mymodule.get_connection()
...
- 这对于打印 sql 字符串很有用。
- 如果字符串很长并且不符合标准宽度,这不是一个好的解决方案 80 个字符。
选项 2
def query():
sql = """
select field1, field2, field3, field4
from table
where condition1=1
and condition2=2"""
con = mymodule.get_connection()
...
-
这里的代码很清楚,但是当你打印 sql 查询字符串时,你会得到所有这些烦人的空格。
u'\nselect field1, field2, field3, field4\n_____从表中\n_ ___where condition1=1 \n_____and condition2=2'
注意:我已将空格替换为下划线_,因为它们被编辑器修剪了
选项 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()
...
- 我不喜欢这个选项,因为每行都需要额外输入 并且也很难编辑查询。
对我来说,最好的解决方案是 Option 2,但我不喜欢打印 sql 字符串时的多余空格。
你知道其他选择吗?
【问题讨论】:
-
这就是 Psycopg 人所说的对查询字符串组合的一种天真的方法,例如使用字符串连接 - initd.org/psycopg/docs/… 。而是使用查询参数来避免 SQL 注入攻击,并自动将 Python 对象与 SQL 文字转换。 stackoverflow.com/questions/3134691/…
-
这个问题其实并不是专门针对SQL查询的,而是普遍适用于Python中多行字符串的格式化。应该删除 SQL 标记。
-
选项 2 - 三引号 和 使用内置的
textwrap.dedent输出到 sql 文件或调试日志记录。
标签: python sql string-formatting