如何将列列表字符串化为hana_ml SQL查询可用格式?
处理hana_ml中select方法传入列名列表的问题
我已经通过hana_ml库的ConnectionContext建立数据库连接,查询代码示例如下:
with ConnectionContext('address', port, 'user', 'password') as cc: df = (cc.table('MY_TABLE', schema='MY_SCHEMA') .filter('COL3 > 5') .select('COL1', 'COL2')) pandas_df = df.collect()
我有一个列名列表,想将其传入select方法,但直接把列表转为字符串会丢失引号:
a = ['COL1','COL2'] b = ','.join(a) print(b) -------- COL1,COL2
请问能否将列表字符串化为带单引号的格式,即得到:
cols = "'col1','col2'"
以便直接传入SQL查询的select方法中:
with ConnectionContext('address', port, 'user', 'password') as cc: df = (cc.table('MY_TABLE', schema='MY_SCHEMA') .filter('COL3 > 5') .select(cols)) pandas_df = df.collect()
解决方案
方法一:生成带单引号的字符串
通过列表推导式给每个列名包裹单引号,再用逗号拼接即可:
a = ['COL1','COL2'] cols = ','.join([f"'{col}'" for col in a]) # 此时cols的值为:'COL1','COL2'
将这个cols传入select方法就能满足需求。
方法二:直接传入列名列表(更推荐)
实际上hana_ml的select方法支持直接传入列名列表,无需手动转成字符串,利用Python的解包运算符*即可实现:
a = ['COL1','COL2'] with ConnectionContext('address', port, 'user', 'password') as cc: df = (cc.table('MY_TABLE', schema='MY_SCHEMA') .filter('COL3 > 5') .select(*a)) # 解包列表元素作为select的参数 pandas_df = df.collect()
这种方式更简洁,也避免了手动拼接字符串可能出现的语法问题。
内容的提问来源于stack exchange,提问作者Vishnukk
相关产品推荐
相关产品推荐

