 .. Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

 ..   http://www.apache.org/licenses/LICENSE-2.0

 .. Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.



.. _howto/operator:SqliteOperator:

SqliteOperator
==============

Use the :class:`~airflow.providers.sqlite.operators.SqliteOperator` to execute
Sqlite commands in a `Sqlite <https://sqlite.org/lang.html>`__ database.


Using the Operator
^^^^^^^^^^^^^^^^^^

Use the ``sqlite_conn_id`` argument to connect to your Sqlite instance where
the connection metadata is structured as follows:

.. list-table:: Sqlite Airflow Connection Metadata
   :widths: 25 25
   :header-rows: 1

   * - Parameter
     - Input
   * - Host: string
     - MySql hostname
   * - Schema: string
     - Set schema to execute Sql operations on by default
   * - Login: string
     - Sqlite user
   * - Password: string
     - Sqlite user password
   * - Port: int
     - Sqlite port

An example usage of the SqliteOperator is as follows:

.. exampleinclude:: /../../airflow/providers/sqlite/example_dags/example_sqlite.py
    :language: python
    :start-after: [START howto_operator_sqlite]
    :end-before: [END howto_operator_sqlite]

Furthermore, you can use an external file to execute the SQL commands. Script folder must be at the same level as DAG.py file.

.. exampleinclude:: /../../airflow/providers/sqlite/example_dags/example_sqlite.py
    :language: python
    :start-after: [START howto_operator_sqlite_external_file]
    :end-before: [END howto_operator_sqlite_external_file]

Reference
^^^^^^^^^
For further information, look at:

* `Sqlite Documentation <https://www.sqlite.org/index.html>`__

.. note::

  Parameters given via SqliteOperator() are given first-place priority
  relative to parameters set via Airflow connection metadata (such as ``schema``, ``login``, ``password`` etc).
