踩坑日记:一个元素的元组后面有个","

124 阅读1分钟
  • 踩坑场景: 拼接原生sql在where条件中使用了in条件
    # 预计sql select * from a where id in (1,2,3,4)
    ids = tuple([data_list])
    sql = f"select * from a where id in {ids}"
    >>> select * from a where id in (1,)
    
    当ids只有一个元素的时候就会出现拼接错误的情况
  • 问题原因: 这是因为python为了区分元组和括号,如果没有这个","那么(1)就会产生歧义,无法判断是元组中有一个元素为1还是括号运算符中有一个1。所以只有一个元素的元组会在元素的后面加一个","进行区分。
  • 知识回忆:
    1. tuple是不可变类型
    2. tuple中的元素在定义后就无法修改
    3. 删除tuple可以使用del tuple_name删除整个tuple