:py:mod:`airflow.providers.microsoft.mssql.hooks.mssql`
=======================================================

.. py:module:: airflow.providers.microsoft.mssql.hooks.mssql

.. autoapi-nested-parse::

   Microsoft SQLServer hook module



Module Contents
---------------

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.microsoft.mssql.hooks.mssql.MsSqlHook




.. py:class:: MsSqlHook(*args, **kwargs)

   Bases: :py:obj:`airflow.hooks.dbapi.DbApiHook`

   Interact with Microsoft SQL Server.

   .. py:attribute:: conn_name_attr
      :annotation: = mssql_conn_id

      

   .. py:attribute:: default_conn_name
      :annotation: = mssql_default

      

   .. py:attribute:: conn_type
      :annotation: = mssql

      

   .. py:attribute:: hook_name
      :annotation: = Microsoft SQL Server

      

   .. py:attribute:: supports_autocommit
      :annotation: = True

      

   .. py:method:: get_conn(self)

      Returns a mssql connection object


   .. py:method:: set_autocommit(self, conn, autocommit)

      Sets the autocommit flag on the connection


   .. py:method:: get_autocommit(self, conn)

      Get autocommit setting for the provided connection.
      Return True if conn.autocommit is set to True.
      Return False if conn.autocommit is not set or set to False or conn
      does not support autocommit.

      :param conn: Connection to get autocommit setting from.
      :return: connection autocommit setting.
      :rtype: bool



