【问题标题】:How to remove an extra comma in dictionary of tuples in python如何在python的元组字典中删除多余的逗号
【发布时间】:2019-05-22 14:09:03
【问题描述】:

我有一个元组值字典,其中一些包含 1 个元素的元组,一些包含多个元素的元组,我想将字典中的每个元组传递给 Oracle SQL 查询并执行一些操作。但是,不幸的是,单元素元组在末尾生成一个额外的逗号,只是为了区分 python 中的列表和元组,这很烦人。

我的元组字典如下所示:

orderid_dict = 

`{foo : (121, 122, 123, 124),
  bar : (221,),
  zoo : (331, 332), 
  xyz : (441,442,443, 444, 445,446),
  abc : (551,)}`

`
dfs=[]
for x in orderid_dict:
     query =  """select  * from table where order_id in 
      """+str(orderid_dict[x])
 df=pd.read_sql_query(query, conn)
dfs.append(df)`

当我执行这个循环时,它会抛出一个错误:

DatabaseError: sql 'select * from table where order_id in (221,)'执行失败:ORA-00936: 缺少表达式

有没有一种方法可以去掉字典中所有单元素元组的最后一个逗号?

我尝试使用:

`for x in orderid_dict:
     ",".join(str(x) for x in orderid_dict[x])`

它不会给我一个错误并且它不起作用。

如果有人能帮助我解决这个问题,我将不胜感激。

【问题讨论】:

    标签: python-3.x dictionary tuples


    【解决方案1】:

    我强烈建议不要尝试将输入片段直接粘贴到 SQL 字符串中。相反,使用后期绑定:

    inputs = (1,2,3,)
    sql = """SELECT *
             FROM table
             WHERE order_id IN (%s)
          """ % (",".join(["?"]*len(inputs)), )
    pd.read_sql_query(sql, conn, params=inputs)
    

    这里发生的情况是 SQL 字符串扩展为 ... IN (?, ?, ?, ?, ...),具体取决于参数的数量。然后通过驱动程序传递实际参数。

    这不仅在所有情况下都有效(除非inputs 为空,这取决于您的sql 引擎WHERE ... IN () 可能是语法错误),这将扩展为注入攻击向量的可能性为零。

    【讨论】:

    • 确定传递的参数个数和参数个数(“?”)一样吗?
    猜你喜欢
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 2019-08-29
    • 2015-09-05
    相关资源
    最近更新 更多