我正在使用Google Cloud Functions连接到Google Bigquery数据库并更新一些行。 cloud函数是使用Python 3编写的。
每当我通过该函数运行update dml时,我都需要帮助弄清楚如何获取结果消息或更新/更改的行数。有任何想法吗?
from google.cloud import bigquery
def my_update_function(context,data):
BQ = bigquery.Client()
query_job = BQ.query("Update table set etc...")
rows = query_job.result()
return (rows)
我知道行总是作为_emptyrowiterator对象返回。我能以任何方式获得结果或结果消息吗?文档说我必须从bigquery作业方法中获取它。但似乎无法弄清楚。
答案 0 :(得分:1)
我认为您正在搜索QueryJob.num_dml_affected_rows
。它包含受update或任何其他DML语句影响的行数。如果您只是将其粘贴到代码中,而不是rows
语句中的return
,则会得到数字int,或者可以创建类似以下内容的消息:
return("Number of updated rows: " + str(job_query.num_dml_affected_rows))
我希望它会有所帮助:)
答案 1 :(得分:0)
好像bigquery Python DB-API文档中没有提到返回的行。 https://googleapis.dev/python/bigquery/latest/reference.html
我决定通过首先生成SELECT语句来检查UPDATE语句中的WHERE子句是否匹配,从而使用一种use回处理方法。
示例:
from google.cloud.bigquery import dbapi as bq
def my_update_function(context,data):
try:
bq_connection = bq.connect()
bq_cursor = bq_connection.cursor()
bq_cursor.execute("select * from table where ID = 1")
results = bq_cursor.fetchone()
if results is None:
print("Row not found.")
else:
bq_cursor.execute("UPDATE table set name = 'etc' where ID = 1")
bq_connection.commit()
bq_connection.close()
except Exception as e:
db_error = str(e)