[英]How python bigquery library DB-API interface supports WHERE IN or WHERE ANY clause
I'm using the DB-API interface of the python bigquery library https://googleapis.dev/python/bigquery/latest/index.html . 我正在使用python bigquery库https://googleapis.dev/python/bigquery/latest/index.html的DB-API接口。 It throws errors like below when I pass parameters to the Cursor.execute() for WHERE IN or WHERE ANY clause
当我将参数传递给WHERE IN或WHERE ANY子句的Cursor.execute()时,它将引发如下错误
google-cloud-bigquery version: 1.19.0 google-cloud-bigquery版本:1.19.0
from google.cloud import bigquery
from google.cloud.bigquery import dbapi
client = bigquery.Client()
conn = dbapi.Connection(client)
curr = conn.cursor()
query = """
SELECT name, state
FROM `bigquery-public-data.usa_names.usa_1910_2013`
WHERE state = %s
LIMIT 2
"""
curr.execute(query, ('NY', ))
result = curr.fetchall()
print(result)
query = """
SELECT name, state
FROM `bigquery-public-data.usa_names.usa_1910_2013`
WHERE state IN %s
LIMIT 2
"""
curr.execute(query, (('NY', 'TX'), ))
result = curr.fetchall()
print(result)
Output 输出量
[Row(('Mildred', 'NY'), {'name': 0, 'state': 1}), Row(('Irene', 'NY'), {'name': 0, 'state': 1})]
Traceback (most recent call last):
File "hello_bq.py", line 25, in <module>
curr.execute(query, (('NY', 'TX'), ))
File "/home/haibin/.local/share/virtualenvs/python-6nCS1ipk/lib/python3.6/site-packages/google/cloud/bigquery/dbapi/cursor.py", line 159, in execute
query_parameters = _helpers.to_query_parameters(parameters)
File "/home/haibin/.local/share/virtualenvs/python-6nCS1ipk/lib/python3.6/site-packages/google/cloud/bigquery/dbapi/_helpers.py", line 117, in to_query_parameters
return to_query_parameters_list(parameters)
File "/home/haibin/.local/share/virtualenvs/python-6nCS1ipk/lib/python3.6/site-packages/google/cloud/bigquery/dbapi/_helpers.py", line 84, in to_query_parameters_list
return [scalar_to_query_parameter(value) for value in parameters]
File "/home/haibin/.local/share/virtualenvs/python-6nCS1ipk/lib/python3.6/site-packages/google/cloud/bigquery/dbapi/_helpers.py", line 84, in <listcomp>
return [scalar_to_query_parameter(value) for value in parameters]
File "/home/haibin/.local/share/virtualenvs/python-6nCS1ipk/lib/python3.6/site-packages/google/cloud/bigquery/dbapi/_helpers.py", line 69, in scalar_to_query_parameter
name, value
google.cloud.bigquery.dbapi.exceptions.ProgrammingError: encountered parameter None with value ('NY', 'TX') of unexpected type
Any help is appreciated. 任何帮助表示赞赏。
I don't see support for array types on the parameter conversion code , but this alternative approach works: 我看不到参数转换代码上对数组类型的支持,但是这种替代方法有效:
from google.cloud import bigquery
from google.cloud.bigquery import dbapi
client = bigquery.Client()
conn = dbapi.Connection(client)
curr = conn.cursor()
query = """
SELECT name, state
FROM `bigquery-public-data.usa_names.usa_1910_2013`
WHERE state IN UNNEST(SPLIT(%s))
LIMIT 2
"""
curr.execute(query, ('NY,TX', ))
result = curr.fetchall()
print(result)
There's an open GitHub issue to track progress for native support: GitHub有一个未解决的问题,用于跟踪本机支持的进度:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.