[ https://issues.apache.org/jira/browse/AIRFLOW-27?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Chris Riccomini updated AIRFLOW-27: ----------------------------------- Labels: newbie (was: autocommit bug mssql mssqloperator) > MsSqlOperator: ERROR - 'pymssql.Connection' object attribute 'autocommit' is > read-only > --------------------------------------------------------------------------------------- > > Key: AIRFLOW-27 > URL: https://issues.apache.org/jira/browse/AIRFLOW-27 > Project: Apache Airflow > Issue Type: Bug > Environment: Ubuntu 14.04.4 LTS > Reporter: Gabriel Llobera > Labels: newbie > Original Estimate: 0.5h > Remaining Estimate: 0.5h > > I have the following code: > {code} > from airflow import DAG > from airflow.operators import MsSqlOperator > from datetime import datetime, timedelta > args = { > 'owner': 'airflow', > 'depends_on_past': True, > 'start_date': datetime(2016, 4, 6, 1, 0), > 'email': ['exam...@email.com'], > 'email_on_failure': True, > 'email_on_retry': True, > 'retries': 1, > 'retry_delay': timedelta(minutes=5), > 'execution_timeout': timedelta(hours=23), > 'priority_weight': 10 > } > dag = DAG('dag_name', default_args=args, schedule_interval='0 1 * * *') > t_generate_metadata_csv = MsSqlOperator(task_id='task_id', > sql='SELECT a FROM b', > mssql_conn_id='mssql_conn', > dag=dag) > {code} > And I'm getting this error: > {code} > ERROR - 'pymssql.Connection' object attribute 'autocommit' is read-only > Traceback (most recent call last): > File "/usr/local/lib/python2.7/dist-packages/airflow/models.py", line 1064, > in run > result = task_copy.execute(context=context) > File > "/usr/local/lib/python2.7/dist-packages/airflow/operators/mssql_operator.py", > line 34, in execute > hook.run(self.sql, parameters=self.parameters) > File "/usr/local/lib/python2.7/dist-packages/airflow/hooks/dbapi_hook.py", > line 101, in run > self.set_autocommit(conn, autocommit) > File "/usr/local/lib/python2.7/dist-packages/airflow/hooks/dbapi_hook.py", > line 115, in set_autocommit > conn.autocommit = autocommit > {code} > Looking at the source code I think I might know why it fails (I have added > links to the referenced lines in the source code). In dbapi_hook, [if the > connection supports > autocommit|https://github.com/airbnb/airflow/blob/master/airflow/hooks/dbapi_hook.py#L123] > then we call set_autocommit, which does [conn.autocommit = > autocommit|https://github.com/airbnb/airflow/blob/master/airflow/hooks/dbapi_hook.py#L138]. > MsSqlHook has [supports_autocommit set to > true|https://github.com/airbnb/airflow/blob/master/airflow/hooks/mssql_hook.py#L13], > but the connection type it uses, which is pymssql has no autocommit > attribute. [Instead it is called > _autocommit|https://github.com/pymssql/pymssql/blob/f814fd9dedc7cd87fabbe92dfb1b6d19a5ed31a3/src/pymssql.pyx#L209] > and [autocommit is defined as a > function|https://github.com/pymssql/pymssql/blob/f814fd9dedc7cd87fabbe92dfb1b6d19a5ed31a3/src/pymssql.pyx#L255] > to turn autocommit on or off. > So it seems that the error is caused by trying to set the conn.autocommit to > a boolean value when it is not actually a variable but a function. This seems > to be supported by this > [link|http://www.gossamer-threads.com/lists/python/python/514536] where > someone causes the same error by trying to assign a value to a function. -- This message was sent by Atlassian JIRA (v6.3.4#6332)