【发布时间】:2019-02-04 18:54:48
【问题描述】:
我目前有一个函数可以读取 SQL 文件以在 Google 的 BigQuery 上执行查询。
import pandas as pd
def func1(arg1,arg2):
with open('query.sql', 'r') as sqlfile:
sql_query= sqlfile.read()
df = pd.read_gbq(sql_query.format(arg1=arg1,arg2=arg2)
query.sql
SELECT *
FROM bigquery.dataset
WHERE col1= {arg1}
AND col2 = {arg2}
数据集位置在 SQL 文件本身中是硬编码的,因此,如果我要更改数据集位置,则很难进行更改(即,我必须单独转到每个 SQL 文件并手动更改“发件人”子句。由于我有很多 SQL 文件,手动编辑每个单独的 SQL 文件的 from 子句变得很麻烦)
所以我的问题是,使数据集位置动态化的最佳方法是什么? 理想情况下,数据集位置应该是一个变量,但问题是放置变量的位置。如果它是一个变量,将它作为函数参数传递会更好吗? IE func1 将有一个参数,称为 dataset_loc
import pandas as pd
def func1(arg1,arg2,dataset_loc):
with open('query.sql', 'r') as sqlfile:
sql_query= sqlfile.read()
df = pd.read_gbq(sql_query.format(arg1=arg1,arg2=arg2,dataset_loc=dataset_loc)
query.sql
SELECT *
FROM {dataset_loc}
WHERE col1 = {arg1}
AND col2 = {arg2}
想知道这样做的最佳方法是什么。谢谢
【问题讨论】:
-
我认为这种方法没有任何问题。我们也这样做。
-
关于
whare子句我建议你使用parameterized queries: