用pythonf-string
写SQL本身是一件十分愉悦的事情,但接触到的工作内容往往涉及到in 数组
这样的事情,误打误撞发现in 元组
居然可以直接实现功能,如下
f"select a from t where a in {tuple(arr)}"
# ORM
.where(User.name.in_(names))
但今天测试偷懒随便写了个单元素数组测试却发现来自SQL的语法错误
xxx in ('xxx',)
但距今为止使用没有出现过问题,问了GPT
,得到情理之外意料之中的答案。
在Python中,元组转化为字符串时,如果元组中只有一个元素,那么在转化为字符串时会在元素后面加上一个逗号,这是为了和普通的括号区分开来。这是因为在Python中,括号不仅可以表示元组,还可以表示数学运算中的优先级,以及函数调用时传递参数的方式。
于是得出了非常丑陋的解决方案
str(my_tuple).rstrip(',)') + ')'
如果只是想将元组拼接字符串可以使用join
",".join(my_tuple)
理解一些庞杂设计中反直觉的要素能够让我感受到设计人员的巧思与远见,但基本现代编程语言的丑陋用法就往往代表着我已经走错了道路,但道路如果都是语法糖铺就的,倒也没必要义无反顾。
采菊东篱下,悠然见南山。
评论区