如何使用 Flask 检查 BigQuery 的特定列中是否存在数据?
How to check whether data exists in specific column on BigQuery with Flask?
我一直在使用 Flask 制作 api,它接收带有参数 (luid) 的 HTTP 请求,获取参数并在 SQL 语句中将它们传递给 Bigquery,如果 luid 的记录有cv_date 列中的数据,它 return 是正确的。但是,当我尝试使用 BigQuery table 中确实存在但不存在的 luids 发送请求以便 api 时,我从他们两个那里接受了 True 。如果它采用 BigQuery 中不存在的 luid 参数,我想将其设置为 return False 。似乎 try 和 exception 效果不佳。谁能给我主意??我为我糟糕的代码感到抱歉。如果缺少任何信息,请告诉我。非常感谢。
此外,我已经设置了export GOOGLE_APPLICATION_CREDENTIALS = Json.file 并为这个服务账户分配了IAM。我成功地通过 gcloud app logs tail -s test 将 SQL 发送到 BigQuery。
我提到的网站如下https://blog.morizyun.com/python/library-bigquery-google-cloud.html
/home/user/api_dev/main.py
from flask import Flask, request
from google.cloud import bigquery
app = Flask(__name__)
@app.route('/')
def get_request():
# luid = request.args.get('luid') or ''
client = bigquery.Client()
query = """SELECT EXISTS(SELECT cv_date
FROM `test-266110.conversion_log.conversion_log_2020*`
WHERE luid = `test-266110.conversion_log.conversion_log_2020*`.luid limit 1000)"""
try:
query_job = client.query(query)
is_exist = len(list(query_job.result())) >= 1
return "True"
except:
return "False"
if __name__ == "__main__":
app.run()
BigQuery
luid | pgid | cv_date | orderid
Uxxxx| 1111 | 2020-08-01| 2222 if this luid, it returns True
Uxxxx| 2222 | | if this luid, it returns False
当您执行与数据库中的任何条目都不匹配的 SELECT 时,不会抛出任何错误,因此不会执行您的 except:
。您的代码 returns False
,仅当您的 try:
部分抛出异常时。
您的逻辑似乎是正确的:is_exist
应使用 True
或 False
值 return 由 >=
运算符初始化。您只需要 return 该值而不是总是 returning True
。此外,如果在过程中抛出异常,您可以保留 except:
并假设没有条目匹配 select 语句:
[...]
try:
query_job = client.query(query)
is_exist = len(list(query_job.result())) >= 1
return str(is_exist)
except:
return False
[...]
我一直在使用 Flask 制作 api,它接收带有参数 (luid) 的 HTTP 请求,获取参数并在 SQL 语句中将它们传递给 Bigquery,如果 luid 的记录有cv_date 列中的数据,它 return 是正确的。但是,当我尝试使用 BigQuery table 中确实存在但不存在的 luids 发送请求以便 api 时,我从他们两个那里接受了 True 。如果它采用 BigQuery 中不存在的 luid 参数,我想将其设置为 return False 。似乎 try 和 exception 效果不佳。谁能给我主意??我为我糟糕的代码感到抱歉。如果缺少任何信息,请告诉我。非常感谢。
此外,我已经设置了export GOOGLE_APPLICATION_CREDENTIALS = Json.file 并为这个服务账户分配了IAM。我成功地通过 gcloud app logs tail -s test 将 SQL 发送到 BigQuery。
我提到的网站如下https://blog.morizyun.com/python/library-bigquery-google-cloud.html
/home/user/api_dev/main.py
from flask import Flask, request
from google.cloud import bigquery
app = Flask(__name__)
@app.route('/')
def get_request():
# luid = request.args.get('luid') or ''
client = bigquery.Client()
query = """SELECT EXISTS(SELECT cv_date
FROM `test-266110.conversion_log.conversion_log_2020*`
WHERE luid = `test-266110.conversion_log.conversion_log_2020*`.luid limit 1000)"""
try:
query_job = client.query(query)
is_exist = len(list(query_job.result())) >= 1
return "True"
except:
return "False"
if __name__ == "__main__":
app.run()
BigQuery
luid | pgid | cv_date | orderid
Uxxxx| 1111 | 2020-08-01| 2222 if this luid, it returns True
Uxxxx| 2222 | | if this luid, it returns False
当您执行与数据库中的任何条目都不匹配的 SELECT 时,不会抛出任何错误,因此不会执行您的 except:
。您的代码 returns False
,仅当您的 try:
部分抛出异常时。
您的逻辑似乎是正确的:is_exist
应使用 True
或 False
值 return 由 >=
运算符初始化。您只需要 return 该值而不是总是 returning True
。此外,如果在过程中抛出异常,您可以保留 except:
并假设没有条目匹配 select 语句:
[...]
try:
query_job = client.query(query)
is_exist = len(list(query_job.result())) >= 1
return str(is_exist)
except:
return False
[...]