You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by "Kaxil Naik (JIRA)" <ji...@apache.org> on 2018/12/30 00:00:00 UTC

[jira] [Updated] (AIRFLOW-3355) Fix BigQueryCursor.execute to work with Python3

     [ https://issues.apache.org/jira/browse/AIRFLOW-3355?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Kaxil Naik updated AIRFLOW-3355:
--------------------------------
    Fix Version/s:     (was: 2.0.0)
                   1.10.2

> 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
>            Assignee: Kengo Seki
>            Priority: Major
>             Fix For: 1.10.2
>
>
> {{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)