Skip to content
This repository has been archived by the owner on Dec 20, 2022. It is now read-only.

beproud/sql-importer

Repository files navigation

It enables SQL files to be imported as python modules.

image

Requirements

  • Python 2.7
  • Python 3.6

Install

$ pip install sql-importer

Usage

  • You have to make __init__.py at the same directory which sql files have been placed on.
  • And write like the following to the `__init__.py`:

    ## if using django:
    # from django.db import connection
    
    import os
    from sql_importer import init
    init(os.path.dirname(__file__), globals(), connection, sql_type='postgresql')
  • That's all, you can import sql files (removed .sql suffix) as python modules.

    • Example: testing/sql/sum_sales.sql exists.
    SELECT SUM(price) AS sum_sales FROM sales
    WHERE
      sales_from >= :'sales_from'
      AND sales_to < :'sales_to'
    ;
    from datetime import date
    from testing import sql
    sql.sum_sales.query(sales_from=date(2017, 5, 22), sales_to=date(2017, 12, 26))
    • sql object has 2 methods, both method execute the sql and receive variables as keyword arguments.
      query

      It returns records. it expects only what has one or more results like select query.

      execute

      It returns number of records affected by the SQL.

  • Now sql_type argument allows postgresql.

Demo

start up

$ git clone git@github.com:beproud/sql-importer.git
$ cd sql-importer
$ docker-compose up

preparation

$ docker exec -it sqlimporter_app_1 /bin/bash
# python -m venv venv # only first time
# source venv/bin/activate

Try

(venv) # ls tests/postgresql/sql
__init__.py  __init__.pyc  __pycache__    clear.sql  create_table.sql  delete.sql  drop_table.sql  insert.sql  select.sql  update.sql

 (venv) # python
>>> from tests.postgresql import sql
>>> sql.
sql.clear         sql.create_table  sql.drop_table    sql.init(         sql.os            sql.select
sql.connection    sql.delete        sql.host          sql.insert        sql.psycopg2      sql.update

>>> sql.create_table.execute()
-1
>>> sql.insert.execute(name='apple', price=100)
1
>>> list(sql.select.query())
[{'name': 'apple', 'price': 100}]
>>> sql.delete.execute(name='orange')
0
>>> sql.delete.execute(name='apple')
1
>>> list(sql.select.query())
[]

Unittest

(venv) # tox
  • This library is tested by only latest postgresql.

Contributors

Links