From a00438bd9dbf1e15b0613170ccfdfc36fee10f1b Mon Sep 17 00:00:00 2001
From: Fontrodona Nicolas <nicolas.fontrodona@ens-lyon.fr>
Date: Tue, 3 Mar 2020 15:04:12 +0100
Subject: [PATCH] src/db_utils/db_creation.py: database creation

---
 src/db_utils/db_creation.py | 350 ++++++++++++++++++++++--------------
 1 file changed, 212 insertions(+), 138 deletions(-)

diff --git a/src/db_utils/db_creation.py b/src/db_utils/db_creation.py
index d4585149..425441a9 100755
--- a/src/db_utils/db_creation.py
+++ b/src/db_utils/db_creation.py
@@ -3,147 +3,221 @@
 
 # -*- coding: utf-8 -*-
 
-
-#Creation of the database using Sqlite3 and SQL commands
+"""
+Creation of the database using Sqlite3 and SQL commands
+"""
 
 
 import sqlite3
-
-
-conn = sqlite3.connect("../../Results/Db_creation/chia_pet_database.db")
-c = conn.cursor()
-
-
-###########################
-# Create table - gin_gene #
-###########################
-c.execute('''CREATE TABLE IF NOT EXISTS gin_gene
-        ([name] VARCHAR(30) NOT NULL,
-        [id] INT NOT NULL,
-        [chromosome] VARCHAR(2) NOT NULL,
-        [start] INT NOT NULL,
-        [stop] INT NOT NULL,
-        [strand] VARCHAR(1) NOT NULL,
-        PRIMARY KEY ([id]))''')
-
-
-###########################
-# Create table - gin_exon #
-###########################
-c.execute('''CREATE TABLE IF NOT EXISTS gin_exon
-        ([id] VARCHAR(30) NOT NULL,
-        [pos] INT NOT NULL,
-        [name] VARCHAR(45) NOT NULL,
-        [id_gene] INT NOT NULL,
-        [chromosome] VARCHAR(2) NOT NULL,
-        [start] INT NOT NULL,
-        [stop] INT NOT NULL,
-        [strand] VARCHAR(1) NOT NULL,
-        PRIMARY KEY ([id])
-        FOREIGN KEY ([id_gene]) REFERENCES gin_gene([id]))''')
-
-
-##############################
-# Create table - gin_project #
-##############################
-c.execute('''CREATE TABLE IF NOT EXISTS gin_project
-        ([id] INT NOT NULL,
-        [id_sample] VARCHAR(45) NOT NULL,
-        [id_project] VARCHAR(45) NOT NULL,
-        [database] VARCHAR(45) NOT NULL,
-        [name] VARCHAR(45) NULL,
-        [description] TEXT NULL,
-        [antiboby] VARCHAR(45) NOT NULL,
-        [cell_line] VARCHAR(45) NOT NULL,
-        [institute] VARCHAR(45) NULL,
-        [citation] VARCHAR(20) NULL,
-        PRIMARY KEY ([id]))''')
-
-
-#####################################
-# Create table - gin_gene_frequency #
-#####################################
-c.execute('''CREATE TABLE IF NOT EXISTS gin_gene_frequency
-        ([id] INT NOT NULL,
-        [ft] VARCHAR(3) NOT NULL,
-        [id_gene] INT NOT NULL,
-        [frequency] FLOAT NULL,
-        PRIMARY KEY ([id]),
-        FOREIGN KEY ([id_gene]) REFERENCES gin_gene([id]))''')
-
-
-#####################################
-# Create table - gin_exon_frequency #
-#####################################
-c.execute('''CREATE TABLE IF NOT EXISTS gin_exon_frequency
-        ([id] INT NOT NULL,
-        [ft] VARCHAR(3) NOT NULL,
-        [id_exon] VARCHAR(30) NOT NULL,
-        [frequency] FLOAT NULL,
-        PRIMARY KEY ([id]),
-        FOREIGN KEY ([id_exon]) REFERENCES gin_exon([id]))''')
-
-
-#######################################
-# Create table - gin_exon_interaction #
-#######################################
-c.execute('''CREATE TABLE IF NOT EXISTS gin_exon_interaction
-            ([id] INT NOT NULL,
-            [force] INT NOT NULL,
-            [exon1] VARCHAR(30) NOT NULL,
-            [exon2] VARCHAR(30) NOT NULL,
-            [id_project] INT NOT NULL,
-            [level] VARCHAR(25) NOT NULL,
-            PRIMARY KEY ([id]),
-            FOREIGN KEY ([exon1]) REFERENCES gin_exon([id]),
-            FOREIGN KEY ([exon2]) REFERENCES gin_exon([id]),
-            FOREIGN KEY ([id_project]) REFERENCES gin_project([id]))''')
-
-
-#######################################
-# Create table - gin_gene_interaction #
-#######################################
-c.execute('''CREATE TABLE IF NOT EXISTS gin_gene_interaction
-            ([id] INT NOT NULL,
-            [force] INT NOT NULL,
-            [gene1] INT NOT NULL,
-            [gene2] INT NOT NULL,
-            [id_project] INT NOT NULL,
-            [level] VARCHAR(25) NOT NULL,
-            PRIMARY KEY ([id]),
-            FOREIGN KEY ([gene1]) REFERENCES gin_gene([id]),
-            FOREIGN KEY ([gene2]) REFERENCES gin_gene([id]),
-            FOREIGN KEY ([id_project]) REFERENCES gin_project([id]))''')
-
-
-############################################
-# Create table - gin_project_splicing_lore #
-############################################
-c.execute('''CREATE TABLE IF NOT EXISTS gin_project_splicing_lore
-            ([id] INT NOT NULL,
-            [project_name] VARCHAR(45) NULL,
-            [source_db] VARCHAR(45) NOT NULL,
-            [db_id_project] VARCHAR(15) NOT NULL,
-            [sf_name] VARCHAR(45) NOT NULL,
-            [cl_name] VARCHAR(45) NOT NULL,
+from .config import Config
+import logging
+from ..logging_conf import logging_def
+
+
+def create_gin_gene_table(conn: sqlite3.Connection) -> None:
+    """
+    Create table gin_gene.
+
+    :param conn: Connection to chia-pet database.
+    """
+    c = conn.cursor()
+    c.execute('''CREATE TABLE IF NOT EXISTS gin_gene
+            ([name] VARCHAR(30) NOT NULL,
+            [id] INT NOT NULL,
+            [chromosome] VARCHAR(2) NOT NULL,
+            [start] INT NOT NULL,
+            [stop] INT NOT NULL,
+            [strand] VARCHAR(1) NOT NULL,
             PRIMARY KEY ([id]))''')
-
-
-############################
-# Create table - ase_event #
-############################
-c.execute('''CREATE TABLE IF NOT EXISTS ase_event
+    conn.commit()
+
+
+def create_gin_exon_table(conn: sqlite3.Connection) -> None:
+    """
+    Create table gin_exon.
+
+    :param conn: Connection to chia-pet database.
+    """
+    c = conn.cursor()
+    c.execute('''CREATE TABLE IF NOT EXISTS gin_exon
+                 ([id] VARCHAR(30) NOT NULL,
+                 [pos] INT NOT NULL,
+                 [name] VARCHAR(45) NOT NULL,
+                 [id_gene] INT NOT NULL,
+                 [chromosome] VARCHAR(2) NOT NULL,
+                 [start] INT NOT NULL,
+                 [stop] INT NOT NULL,
+                 [strand] VARCHAR(1) NOT NULL,
+                 PRIMARY KEY ([id])
+                 FOREIGN KEY ([id_gene]) REFERENCES gin_gene([id]))''')
+    conn.commit()
+
+
+def create_gin_projects_table(conn: sqlite3.Connection) -> None:
+    """
+    Create table gin_project.
+
+    :param conn: Connection to chia-pet database.
+    """
+    c = conn.cursor()
+    c.execute('''CREATE TABLE IF NOT EXISTS gin_projects
+                 ([id] INT NOT NULL,
+                 [id_sample] VARCHAR(45) NOT NULL,
+                 [id_project] VARCHAR(45) NOT NULL,
+                 [database] VARCHAR(45) NOT NULL,
+                 [name] VARCHAR(45) NULL,
+                 [description] TEXT NULL,
+                 [antiboby] VARCHAR(45) NOT NULL,
+                 [cell_line] VARCHAR(45) NOT NULL,
+                 [institute] VARCHAR(45) NULL,
+                 [citation] VARCHAR(20) NULL,
+                 PRIMARY KEY ([id]))''')
+    conn.commit()
+
+
+def create_gin_gene_frequency_table(conn: sqlite3.Connection) -> None:
+    """
+    Create table gin_gene_frequency.
+
+    :param conn: Connection to chia-pet database.
+    """
+    c = conn.cursor()
+    c.execute('''CREATE TABLE IF NOT EXISTS gin_gene_frequency
+                 ([id] INT NOT NULL,
+                 [ft] VARCHAR(3) NOT NULL,
+                 [id_gene] INT NOT NULL,
+                 [frequency] FLOAT NULL,
+                 PRIMARY KEY ([id]),
+                 FOREIGN KEY ([id_gene]) REFERENCES gin_gene([id]))''')
+    conn.commit()
+
+
+def create_gin_exon_frequency_table(conn: sqlite3.Connection) -> None:
+    """
+    Create table gin_exon_frequency.
+
+    :param conn: Connection to chia-pet database.
+    """
+    c = conn.cursor()
+    c.execute('''CREATE TABLE IF NOT EXISTS gin_exon_frequency
             ([id] INT NOT NULL,
-            [id_project] INT NOT NULL,
-            [gene_id] INT NOT NULL,
-            [pos] INT NOT NULL,
-            [exon_id] VARCHAR(30) NOT NULL,
-            [delta_psi] FLOAT NULL,
-            [pvalue] FLOAT NULL,
-            [pvalue_glm_cor] FLOAT NULL,
+            [ft] VARCHAR(3) NOT NULL,
+            [id_exon] VARCHAR(30) NOT NULL,
+            [frequency] FLOAT NULL,
             PRIMARY KEY ([id]),
-            FOREIGN KEY ([exon_id]) REFERENCES gin_exon([id]),
-            FOREIGN KEY ([gene_id]) REFERENCES gin_gene([id]),
-            FOREIGN KEY ([id_project]) REFERENCES gin_project_splicing_lore([id]))''')
-
-conn.commit()
\ No newline at end of file
+            FOREIGN KEY ([id_exon]) REFERENCES gin_exon([id]))''')
+    conn.commit()
+
+
+def create_gin_exon_interaction_table(conn: sqlite3.Connection) -> None:
+    """
+    Create table gin_exon_interaction.
+
+    :param conn: Connection to chia-pet database.
+    """
+    c = conn.cursor()
+    c.execute('''CREATE TABLE IF NOT EXISTS gin_exon_interaction
+                ([id] INT NOT NULL,
+                [force] INT NOT NULL,
+                [exon1] VARCHAR(30) NOT NULL,
+                [exon2] VARCHAR(30) NOT NULL,
+                [id_project] INT NOT NULL,
+                [level] VARCHAR(25) NOT NULL,
+                PRIMARY KEY ([id]),
+                FOREIGN KEY ([exon1]) REFERENCES gin_exon([id]),
+                FOREIGN KEY ([exon2]) REFERENCES gin_exon([id]),
+                FOREIGN KEY ([id_project]) REFERENCES gin_project([id]))''')
+    conn.commit()
+
+
+def create_gin_gene_interaction_table(conn: sqlite3.Connection) -> None:
+    """
+    Create table gin_gene_interaction.
+
+    :param conn: Connection to chia-pet database.
+    """
+    c = conn.cursor()
+    c.execute('''CREATE TABLE IF NOT EXISTS gin_gene_interaction
+                ([id] INT NOT NULL,
+                [force] INT NOT NULL,
+                [gene1] INT NOT NULL,
+                [gene2] INT NOT NULL,
+                [id_project] INT NOT NULL,
+                [level] VARCHAR(25) NOT NULL,
+                PRIMARY KEY ([id]),
+                FOREIGN KEY ([gene1]) REFERENCES gin_gene([id]),
+                FOREIGN KEY ([gene2]) REFERENCES gin_gene([id]),
+                FOREIGN KEY ([id_project]) REFERENCES gin_project([id]))''')
+    conn.commit()
+
+
+def create_gin_project_splicing_lore_table(conn: sqlite3.Connection) -> None:
+    """
+    Create table gin_project_splicing_lore
+
+    :param conn: Connection to chia-pet database.
+    """
+    c = conn.cursor()
+    c.execute('''CREATE TABLE IF NOT EXISTS gin_project_splicing_lore
+                ([id] INT NOT NULL,
+                [project_name] VARCHAR(45) NULL,
+                [source_db] VARCHAR(45) NOT NULL,
+                [db_id_project] VARCHAR(15) NOT NULL,
+                [sf_name] VARCHAR(45) NOT NULL,
+                [cl_name] VARCHAR(45) NOT NULL,
+                PRIMARY KEY ([id]))''')
+    conn.commit()
+
+
+def create_gin_ase_event_table(conn: sqlite3.Connection) -> None:
+    """
+    Create table ase_event.
+
+    :param conn: Connection to chia-pet database.
+    """
+    c = conn.cursor()
+    c.execute('''CREATE TABLE IF NOT EXISTS gin_ase_event
+                ([id] INT NOT NULL,
+                [id_project] INT NOT NULL,
+                [gene_id] INT NOT NULL,
+                [pos] INT NOT NULL,
+                [exon_id] VARCHAR(30) NOT NULL,
+                [delta_psi] FLOAT NULL,
+                [pvalue] FLOAT NULL,
+                [pvalue_glm_cor] FLOAT NULL,
+                PRIMARY KEY ([id]),
+                FOREIGN KEY ([exon_id]) REFERENCES gin_exon([id]),
+                FOREIGN KEY ([gene_id]) REFERENCES gin_gene([id]),
+                FOREIGN KEY ([id_project]) 
+                REFERENCES gin_project_splicing_lore([id]))''')
+    conn.commit()
+
+
+def main_create_db(logging_level: str = "DISABLE"):
+    """
+    Create an empty chia-pet database.
+    """
+    logging_def(Config.db_file.parent, __file__, logging_level)
+    conn = sqlite3.connect(Config.db_file)
+    logging.debug('Creation of gin_gene')
+    create_gin_gene_table(conn)
+    logging.debug('Creation of gin_exon')
+    create_gin_exon_table(conn)
+    logging.debug('Creation of gin_project_gene')
+    create_gin_projects_table(conn)
+    logging.debug('Creation of gin_gene_frequency_table')
+    create_gin_gene_frequency_table(conn)
+    logging.debug('Creation of gin_exon_frequency_table')
+    create_gin_exon_frequency_table(conn)
+    logging.debug('Creation of gin_exon_interaction_table')
+    create_gin_exon_interaction_table(conn)
+    logging.debug('Creation of gin_gene_interaction_table')
+    create_gin_gene_interaction_table(conn)
+    logging.debug('Creation of gin_project_splicing_lore_table')
+    create_gin_project_splicing_lore_table(conn)
+    logging.debug('Creation of gin_ase_event_table')
+    create_gin_ase_event_table(conn)
+
+
+if __name__ == "__main__":
+    main_create_db("DEBUG")
-- 
GitLab