python - 删除整数列表周围的括号
问题描述
我有一个返回以下内容的函数:
def choose_tables(self):
...
...
return final_table_set
它返回一个看起来像这样的整数列表:
[11,12,13,14,15]
我遇到的问题是我试图在另一个执行 SQL 并在 DataFrame 中返回它的函数中使用该返回值:
def execute_sql(self):
s = self.connection()
data = self.choose_tables()
data2 = "SELECT * FROM TABLE_A WHERE TABLE_ID IN ({})".format(data)
df = pd.read_sql(data2, s)
它出错了,因为它是这样读取的:
'SELECT * FROM TABLE_A WHERE TABLE_ID IN ([11, 12, 14, 15])'
有没有办法摆脱数字周围的括号?我假设在返回 final_table_set 之前,我需要在最后某处的 choose_tables() 函数中执行此操作?这些是整数,而不是 SQL 语句中使用的字符串,所以我认为 ','.join 不会起作用
解决方案
从变量构造 SQL 字符串存在安全问题,但除此之外 - 获得您正在寻找的结果的最简单方法是:
data = [11,12,13,14,15]
sql = "SELECT * FROM TABLE_A WHERE TABLE_ID IN ({})".format(",".join(str(d) for d in data))
>>> 'SELECT * FROM TABLE_A WHERE TABLE_ID IN (11,12,13,14,15)'
推荐阅读
- python - 给定每一步的水平或垂直平移,如何在 5x5 矩阵中找到 (0,0) 和 (4,4) 之间的最短路径
- ruby-on-rails - 如何在部署 docker app 后自动运行 db:migrate?
- r - 在同一深度范围内的中心点半径内的相邻点的数量?
- swift - 'Double?' 类型的值 没有成员“相乘”
- python - 如何根据列表中的项目是否出现在字段中的任何位置从数据框中删除列
- spring-boot - 从 java JDBCTemplate 调用具有 CLOB 类型输入参数的 Oracle 存储过程时出现问题
- c# - 实现 INotifyPropertyChanged 的不同方式之间有什么区别?
- node.js - 防止使用 Mongoose 和 Express 将相同的文档添加到只有时间戳不同的数组
- rest - 无法从数据库中得到我需要的东西
- bokeh - 是否可以在使用矩形对象创建的热图上使用 LabelSet(类似于失业.py 示例)?