当前位置: 首页 > 面试题库 >

Python SQL查询字符串格式

邓鸿彩
2023-03-14
问题内容

我正在尝试找到格式化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 ‘\ n选取FIELD1,FIELD2,字段3,字段4 \ N_ 从表\ n 其中条件1
= 1 \ n
_and条件2 = 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()    
    ...
  • 我不喜欢此选项,因为每一行都需要额外输入,而且也很难编辑查询。

对我来说,最好的解决方案是 选项2, 但我不喜欢在打印sql字符串时使用多余的空格。

您还知道其他选择吗?


问题答案:

很抱歉张贴到这样的旧主题-但作为同时也对pythonic“ best”具有热情的人,我想我会分享我们的解决方案。

解决方案是使用python的String Literal
Concatenation(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};")

优点:

  1. 它保留pythonic的“制表格式”格式,但不添加多余的空格字符(这会污染日志记录)。
  2. 它避免了选项4的反斜杠连续丑陋,这使添加语句变得困难(更不用说空格盲目了)。
  3. 而且,在VIM中扩展语句非常简单(只需将光标定位到插入点,然后按 SHIFT-O 即可打开新行)。


 类似资料:
  • 我想知道您通常是否将查询字符串中的任何字母大写,使用短划线或下划线作为变量名称,或者具有任何其他查询字符串命名约定。我找不到任何参考资料。 编辑:既然似乎没有约定俗成,有没有最佳实践或常用的方法?

  • 问题内容: 是否有任何JavaScript库可以根据查询字符串,样式生成字典? 可以像这样使用的东西: “查询字符串”是否在.NET领域之外称为其他名称?为什么不分解为键/值集合? 编辑:我已经编写了自己的函数,但是任何主要的库都可以这样做吗? 问题答案: 是否有任何JavaScript库可以根据查询字符串,样式生成字典? 可以像这样使用的东西: “查询字符串”是否在.NET领域之外称为其他名称?

  • 问题内容: 我有一个使用C#和asp.net创建的webapp。我将参数值放在带有加号(+)的查询字符串中。但是加号消失了。 如何在查询字符串中包含加号(+)而不会消失? 请指教。 谢谢。 编辑:使用UrlEncode添加代码 问题答案: 符号在查询字符串中具有语义。它用来表示一个空间。在查询字符串中具有语义重要性的另一个字符是用于分隔查询字符串中的各个对。 大多数服务器端脚本会在使用查询参数之前

  • Stability: 2 - Stable querystring 模块提供了一些实用工具,用于解析与格式化 URL 查询字符串。它可以通过以下方式被使用: const querystring = require('querystring'); querystring.escape(str) 新增于: v0.1.25 str <string> querystring.escape() 方法对给定

  • 问题内容: 我一直在尝试找出如何使用MySQL进行查询的方法,该查询检查特定列中的值(字符串)是否包含某些数据(字符串),如下所示: 在PHP中,该函数称为,因此可能: 问题答案: 实际上很简单: 的是用于设置任何字符(无,一个或多个)的通配符。请注意,这在非常大的数据集上可能会变慢,因此,如果数据库增长,则需要使用全文索引。

  • 问题内容: 有没有一种方法可以在Kibana中查询某个长度的值? 例如,给定以下两个KV对: 我想搜索key.length> 5并仅检索“某物”。 我看到的另一个选项是从logstash添加标签,但是随后我将不得不重新加载几百GB。 问题答案: 您可以在 Kibana中 使用脚本查询来执行此 操作 。Kibana中的脚本查询,有一个键长度大于5的脚本查询示例: 并且您还需要在 elasticsea