【问题标题】:Inserting 200 variables in a string stored in list在存储在列表中的字符串中插入 200 个变量
【发布时间】:2019-06-04 14:39:24
【问题描述】:

我有一个变量列表:

listV = ['v1, 'v2', ...,'v200']

我想以更简洁的方式执行以下操作:

q1 = 'insert into myTable ({}, {}, {},....{})'.format(listV)

我想要的输出是:

q1 = 'insert into myTable (v1, v2, v3, ...., v200)'

对于较少数量的变量,我可以编写更简洁的代码,但使用 200 个变量我很难创建更简洁的代码。

我需要动态创建q1,因为listV 的内容发生了变化,但listV 的长度保持不变。

【问题讨论】:

  • ', '.join(listV)...
  • 必填Bobby Drop Tables。你应该使用parameterized queries 或者你让自己对SQL-injection attacks 开放。
  • 如果我猜对了,您正在尝试构建 SQL 查询。 (如果是,请确认。如果不是,则忽略此评论。)这看起来像xy problem。您似乎在寻找直接/原始格式,但有更好、更简单、更安全的方法来构建 SQL 查询。

标签: python python-3.x python-3.5


【解决方案1】:
>>> listV = ['v1', 'v2', 'v200']
>>> q1 = 'insert into myTable'
>>> q1 = q1 + ' (' + ', '.join(listV) +  ')'
>>> q1
'insert into myTable (v1, v2, v200 )'

【讨论】:

    【解决方案2】:
    listV = ['v1', 'v2', 'v200']
    q1 = "insert into myTable ({})".format(", ".join(listV))
    

    【讨论】:

      【解决方案3】:

      为了省点麻烦,您也可以通过编程方式创建格式字符串。

      listV = ["V1", "V2", "V3"]
      
      n = len(listV)
      
      fstring = "insert into myTable (" + "{}, " * (n-1) + "{})"
      
      q1 = fstring.format(*listV) 
      # The * unpacks the items in listV into separate arguments
      print(q1)
      # >>> insert into myTable (V1, V2, V3)
      

      【讨论】:

      • 或者只是在结果字符串"".format(*listV)中调用format
      【解决方案4】:

      我能想到的就是这样......

      my_list = [1,2,3]
      q = "insert into mytable ("
      for i in range(0, len(my_list), 1):
          currNum = my_list[i]
          if i != len(my_list) - 1:
              q += str(currNum) + ","
          else:
              q += str(currNum)
      q += ")"
      print(q)
      

      我是 Python 新手 -_-

      【讨论】:

        【解决方案5】:
        listV = [i for i in range(200)]
        q1 = str("insert into myTable (" + "{}, "*(len(listV)-1) + "{})").format(*listV)
        

        正如其他人所提到的,字符串格式的 sql 查询会使您的数据库容易受到 SQL 注入的攻击。

        编辑 Olvyn Roght 有一个非常好的答案!这是一个也适用于整数的替代版本:

        listV = [i for i in range(200)]
        q1 = "insert into myTable ({})".format(str(listV)[1:-1])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-02
          • 1970-01-01
          • 2022-11-02
          • 2022-11-18
          • 2014-02-12
          相关资源
          最近更新 更多