在Databricks笔记本中使用Koalas.sql传递Python变量至SQL查询失败求助
在Databricks Koalas中传入Python变量到SQL查询的解决方法
你的报错信息翻译为:
AnalysisException: 无法解析给定输入列中的'
pyth_var'
原代码失效的原因是:globals参数并非直接替换SQL中的变量名,而是将Python变量注册为临时视图/表,直接写pyth_var会被SQL解析器当成列名,自然找不到匹配的列。
以下是几种可行的解决方式:
方法1:字符串格式化(简单场景适用,注意SQL注入风险)
直接用f-string将变量值插入SQL语句,字符串类型值需包裹单引号:import databricks.koalas as ks pyth_var = 'dog' query = f""" SELECT * FROM my_database WHERE animal = '{pyth_var}' """ ks.sql(query)方法2:参数化查询(推荐,安全防注入)
利用Koalas的params参数传递变量,无需手动拼接字符串:import databricks.koalas as ks query = """ SELECT * FROM my_database WHERE animal = ? """ ks.sql(query, params=('dog',))多变量场景按顺序传入元组即可:
query = """ SELECT * FROM my_database WHERE animal = ? AND age > ? """ ks.sql(query, params=('dog', 3))方法3:正确使用
globals参数
将Python变量转为Koalas对象后注册为临时视图,在SQL中通过子查询引用:import databricks.koalas as ks # 将标量转为Koalas Series并命名 pyth_var = ks.Series(['dog'], name='target_animal') query = """ SELECT * FROM my_database WHERE animal = (SELECT target_animal FROM pyth_var) """ ks.sql(query, globals={'pyth_var': pyth_var})
内容的提问来源于stack exchange,提问作者Qarolina
相关产品推荐
相关产品推荐

