python使用全局变量通过where子句从bigquery查询数据



我想从bigquery表中检索数据,执行python中的select语句,并在where子句中使用变量。这是我的代码:

bq_client = Client()    
var1 = 'New York'    
sql = """
SELECT *
FROM `myTable`
WHERE town = var1
LIMIT 10
"""      
df = bq_client.query(sql).to_dataframe()
print(df)

这不起作用,因为运行时var1不会被其值所取代

如图所示,要在python代码中使用变量,必须使用作业配置告诉BigQuery这些变量存在,然后可以使用语法调用它们:@var1

例如:

date = "2020-01-01"
job_config = bigquery.QueryJobConfig()
sql = """
SELECT *
FROM dataset.table
WHERE date = @date    
"""
query_params = [bigquery.ScalarQueryParameter('date', 'DATE', date)]
job_config.query_parameters = query_params

您可以在官方文档中找到更多信息。

您的查询中没有变量-它有字符串var1

如果你想做类似的事情

sql = """
select *
from `myTable`
where town = {}
LIMIT 10
""".format(var1)

如果这是针对生产代码的,那么您通常不希望在sql中使用字符串插值。我不知道大型查询客户端库,但大多数python-sql库都可以选择将参数传递给它们(并根据sql-injction类型的东西清除这些参数,修复类型等等(

最新更新