如何根据 PEP8 格式化长 SQL 查询
How to format long SQL queries according to PEP8
根据PEP 8 (Maximum Line Length),一行不应超过 79 个字符。
然而,当我尝试拆分查询时,我 运行 遇到了连续字符和无效标记等问题
例如,根据 PEP8,格式化此查询的最佳方式是什么?
cursor.execute("SELECT pivot_id FROM aud_qty WHERE hshake1 is NULL AND ((strftime('%s', DATETIME('now')) - strftime('%s', sent_to_pivot)) / (60)) > 30;")
怎么样
cursor.execute("""SELECT pivot_id
FROM aud_qty
WHERE hshake1 is NULL
AND ((strftime('%s', DATETIME('now')) -
strftime('%s', sent_to_pivot)) / (60)) > 30;
""")
?使用 """
或 '''
你会得到与很长的字符串相同的行为,但你可以很好地使用换行符。你的数据库也不会介意它们。
您需要使用多行字符串。如果你只用 "
或 '
声明你的字符串,它将是单行字符串,要创建多行字符串,你需要用 """
或 [=14= 包裹你的字符串].这是一个例子:
sql_query = """SELECT pivot_id
FROM aud_qty
WHERE hshake1 is NULL AND
((strftime('%s', DATETIME('now')) - strftime('%s', sent_to_pivot)) / (60)) > 30;"""
值得一提的是,手动创建 SQL 查询通常不是一个好主意,因为它可以启用 SQL 注入攻击并导致其他问题。
怎么样
from models import AudQty,session
update_limit = time.time()-30*60 # 30 minutes ago
session.query(AudQty.pivot_id).filter(hshake1=None,
sent_to_pivot_lte=update_limit).all()
字符串也可以是没有三重引号的多行字符串,因为两个引号字符串彼此相邻会自动连接
cursor.execute("SELECT pivot_id FROM aud_qty "
"WHERE hshake1 is NULL AND "
"((strftime('%s', DATETIME('now')) - strftime('%s', sent_to_pivot)) / (60)) > 30;")
通过这种方式,您可以清楚地看到 SQL 符合 PEP8 准则的声明。
cursor.execute("""
SELECT pivot_id
FROM aud_qty
WHERE hshake1 is NULL
AND ((strftime('%s', DATETIME('now')) -
strftime('%s', sent_to_pivot)) / (60)) > 30;
""")
根据PEP 8 (Maximum Line Length),一行不应超过 79 个字符。
然而,当我尝试拆分查询时,我 运行 遇到了连续字符和无效标记等问题
例如,根据 PEP8,格式化此查询的最佳方式是什么?
cursor.execute("SELECT pivot_id FROM aud_qty WHERE hshake1 is NULL AND ((strftime('%s', DATETIME('now')) - strftime('%s', sent_to_pivot)) / (60)) > 30;")
怎么样
cursor.execute("""SELECT pivot_id
FROM aud_qty
WHERE hshake1 is NULL
AND ((strftime('%s', DATETIME('now')) -
strftime('%s', sent_to_pivot)) / (60)) > 30;
""")
?使用 """
或 '''
你会得到与很长的字符串相同的行为,但你可以很好地使用换行符。你的数据库也不会介意它们。
您需要使用多行字符串。如果你只用 "
或 '
声明你的字符串,它将是单行字符串,要创建多行字符串,你需要用 """
或 [=14= 包裹你的字符串].这是一个例子:
sql_query = """SELECT pivot_id
FROM aud_qty
WHERE hshake1 is NULL AND
((strftime('%s', DATETIME('now')) - strftime('%s', sent_to_pivot)) / (60)) > 30;"""
值得一提的是,手动创建 SQL 查询通常不是一个好主意,因为它可以启用 SQL 注入攻击并导致其他问题。
怎么样
from models import AudQty,session
update_limit = time.time()-30*60 # 30 minutes ago
session.query(AudQty.pivot_id).filter(hshake1=None,
sent_to_pivot_lte=update_limit).all()
字符串也可以是没有三重引号的多行字符串,因为两个引号字符串彼此相邻会自动连接
cursor.execute("SELECT pivot_id FROM aud_qty "
"WHERE hshake1 is NULL AND "
"((strftime('%s', DATETIME('now')) - strftime('%s', sent_to_pivot)) / (60)) > 30;")
通过这种方式,您可以清楚地看到 SQL 符合 PEP8 准则的声明。
cursor.execute("""
SELECT pivot_id
FROM aud_qty
WHERE hshake1 is NULL
AND ((strftime('%s', DATETIME('now')) -
strftime('%s', sent_to_pivot)) / (60)) > 30;
""")