ilarionkuleshov opened a new issue, #43798:
URL: https://github.com/apache/airflow/issues/43798

   ### Apache Airflow Provider(s)
   
   microsoft-mssql
   
   ### Versions of Apache Airflow Providers
   
   apache-airflow-providers-microsoft-mssql==3.9.1
   
   ### Apache Airflow version
   
   2.9.2
   
   ### Operating System
   
   Ubuntu 22.04
   
   ### Deployment
   
   Docker-Compose
   
   ### Deployment details
   
   _No response_
   
   ### What happened
   
   I found that 
[MsSqlHook](https://github.com/apache/airflow/blob/main/providers/src/airflow/providers/microsoft/mssql/hooks/mssql.py#L31)
 in 
[get_conn](https://github.com/apache/airflow/blob/main/providers/src/airflow/providers/microsoft/mssql/hooks/mssql.py#L137)
 method does not use extra parameters from airflow connection when creating 
`PymssqlConnection`. Thus, it is impossible to pass any special argument from 
the extra parameters of the airflow connection to `pymssql.connect` function.
   I discovered this when I needed to pass the `tds_version` argument, because 
without it the connection to my database did not occur successfully.
   Also, the documentation says that extra parameters [can be used in MSSQL 
connection](https://airflow.apache.org/docs/apache-airflow-providers-microsoft-mssql/stable/connections/mssql.html#:~:text=can%20be%20used%20in%20MSSQL%20connection),
 but in fact this is not the case.
   
   ### What you think should happen instead
   
   I think the 
[get_conn](https://github.com/apache/airflow/blob/main/providers/src/airflow/providers/microsoft/mssql/hooks/mssql.py#L137)
 method should look something like this:
   ```python
   def get_conn(self) -> PymssqlConnection:
       """Return ``pymssql`` connection object."""
       conn = self.connection
       extra_conn_args = {arg_name: arg_val for arg_name, arg_val in 
conn.extra_dejson.items() if arg_name != "sqlalchemy_scheme"}  # new code line
       return pymssql.connect(
           server=conn.host,
           user=conn.login,
           password=conn.password,
           database=self.schema or conn.schema,
           port=str(conn.port),
           **extra_conn_args,  # new code line
       )
   ```
   I tested it locally, and with this code the extra parameters are 
successfully passed to `PymssqlConnection`. And in my case the connection to 
the DB was successful.
   
   I would also like to note that I added an excluding for the 
`sqlalchemy_scheme` parameter, because in the hook it is used in the 
[sqlalchemy_scheme](https://github.com/apache/airflow/blob/main/providers/src/airflow/providers/microsoft/mssql/hooks/mssql.py#L59)
 property, and in the `pymssql.connect` function it is not needed.
   
   ### How to reproduce
   
   To reproduce the bug, you should try to add any extra parameter to the 
airflow connection. And this will not affect the connection to the database, 
because the hook does not use extra parameters to create a connection to the 
database.
   
   ### Anything else
   
   I could probably create a PR with a fix, but since I'm new here, I assume 
that there might be a catch, and maybe it was intended that extra parameters 
not be passed to the pymssql connection (if so I wonder why). So, for now, I 
decided to just create an issue.
   
   ### Are you willing to submit PR?
   
   - [X] Yes I am willing to submit a PR!
   
   ### Code of Conduct
   
   - [X] I agree to follow this project's [Code of 
Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to