如何在query_to_pandas中使用变量

时间:2019-07-07 20:58:22

标签: python sql pandas google-bigquery

只是随BigQuery和其他东西一起被转储到SQL中,所以我不知道这些东西的很多术语。当前正在尝试创建一个您为其输入字符串(要取出的数据集名称)的方法。但是我似乎无法在不返回错误的情况下将字符串放入我想要的变量中。

我查找了如何为SQL内容添加变量,但是大多数解决方案都不适合我的情况。然后我最后在$“和”“变量之前添加了s(这最终导致语法错误)

import pandas as pd
import bq_helper
from bq_helper import BigQueryHelper
# Some code about using BQ_helper to get the data, if you need it lmk

# test = `data.patentsview.application`

query1 = s"""
SELECT * FROM $s
LIMIT
 20;
        """
response1 = patentsview.query_to_pandas_safe(query1)
response1.head(20)

上面的代码返回错误代码

File "<ipython-input-63-6b07957ebb81>", line 8
    """

^
SyntaxError: invalid syntax 

编辑: 可用,但必须手动蛮力执行的原始代码是

query1 = """
SELECT * FROM `patents-public-data.patentsview.application`
LIMIT
 20;
        """
response1 = patentsview.query_to_pandas_safe(query1)
response1.head(20)

2 个答案:

答案 0 :(得分:0)

我相信这会有所帮助:https://cloud.google.com/bigquery/docs/parameterized-queries#bigquery_query_params_named-python

  

要指定命名参数,请使用@字符,后跟标识符,例如@param_name

答案 1 :(得分:0)

如果我对您的理解正确,那么可能就是您要找的东西:

#making up some variables:
vars = ['`patents-public-data.patentsview.application','`patents-private-data.patentsview.application']

for var in vars:
    query = f"""SELECT * FROM {var}
LIMIT
 20;
 """
    print(query)

输出:

 SELECT * FROM `patents-public-data.patentsview.application
LIMIT
 20;

SELECT * FROM `patents-private-data.patentsview.application
LIMIT
 20;