Kengo Seki created AIRFLOW-3355:
-----------------------------------
Summary: Fix BigQueryCursor.execute to work with Python3
Key: AIRFLOW-3355
URL: https://issues.apache.org/jira/browse/AIRFLOW-3355
Project: Apache Airflow
Issue Type: Bug
Components: gcp, hooks
Reporter: Kengo Seki
{{BigQueryCursor.execute}} uses {{dict.iteritems}} internally, so it fails with
Python3 if binding parameters are provided.
{code}
In [1]: import sys
In [2]: sys.version
Out[2]: '3.6.6 (default, Sep 12 2018, 18:26:19) \n[GCC 8.0.1 20180414
(experimental) [trunk revision 259383]]'
In [3]: from airflow.contrib.hooks.bigquery_hook import BigQueryHook
In [4]: hook = BigQueryHook()
In [5]: conn = hook.get_conn()
[2018-11-15 19:01:35,856] {discovery.py:267} INFO - URL being requested: GET
https://www.googleapis.com/discovery/v1/apis/bigquery/v2/rest
In [6]: cur = conn.cursor()
In [7]: cur.execute("SELECT count(*) FROM ds.t WHERE c = %(v)d", {"v": 0})
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-7-54c59af50270> in <module>
----> 1 cur.execute("SELECT count(*) FROM ds.t WHERE c = %(v)d", {"v": 0})
~/dev/incubator-airflow/airflow/contrib/hooks/bigquery_hook.py in execute(self,
operation, parameters)
1561 """
1562 sql = _bind_parameters(operation,
-> 1563 parameters) if parameters else operation
1564 self.job_id = self.run_query(sql)
1565
~/dev/incubator-airflow/airflow/contrib/hooks/bigquery_hook.py in
_bind_parameters(operation, parameters)
1684 # inspired by MySQL Python Connector (conversion.py)
1685 string_parameters = {}
-> 1686 for (name, value) in parameters.iteritems():
1687 if value is None:
1688 string_parameters[name] = 'NULL'
AttributeError: 'dict' object has no attribute 'iteritems'
{code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)