pandas - pd.read_sql_query 字符串列表参数折叠到第一个元素
问题描述
我遇到了一个奇怪的pandas.read_sql_query()
方法问题,当我传递一个格式为字符串的列表参数时,该参数只读取列表的第一个元素并删除其他所有元素。原始列表是一个重新格式化为字符串的数字列表,因此理论上应该保留列表的所有元素。例如,此代码返回的数据帧:
l = [1, 2, 3]
l_as_str = ", ".join([x for x in map(str, l)])
QUERY = """SELECT * FROM table WHERE id in (%(l_as_str)s)"""
df = pd.read_sql_query(QUERY, params={"l_as_str": l_as_str}, con=engine)
...仅包含 id = 1 的项目,即 的第一个元素l
。如果我切换元素的顺序(例如l = [2, 1, 3]
),那么它只返回 id = 2 的项目。换句话说,l_as_str
似乎只折叠到第一个元素。知道问题是什么吗?
解决方案
只需使用 f 字符串进行简化。无需通过params
l = [1, 2, 3]
l_as_str = ", ".join([x for x in map(str, l)])
QUERY = f"""SELECT * FROM table WHERE id in ({l_as_str})"""
df = pd.read_sql_query(QUERY, con=engine)
推荐阅读
- c - 如何将保存在 .txt 文件中的过程值保存到 c 中的 4 个不同数组中
- botframework - 使用 DirectLine api 构建自定义前端聊天机器人解决方案需要什么,而不是使用 Web 渠道,而是使用自定义渠道
- google-cloud-firestore - Firestore getDocuments Source.cache 和索引 - 离线查询
- javascript - 控制速度和改变球的颜色
- python - 如何优化我的代码,以便能够使用循环在子图中绘制直方图?
- python - 具有 Sigmoid 函数的机器学习算法将其参数初始化为零
- java - Duration.between() 不能按我想要的方式工作
- java - 在 BarChart JavaFX 上的每个条形图内添加图像
- google-sheets - 如何知道链接的 Google 表格?
- c++ - 虚拟类 C++ 和继承