我想从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类型的东西清除这些参数,修复类型等等(