From 796e7e98ec361ce000bf62b003549970b57b9ed8 Mon Sep 17 00:00:00 2001
From: CyrilM <mammar@lal.in2p3.fr>
Date: Tue, 9 Oct 2018 11:20:55 +0200
Subject: [PATCH] =?UTF-8?q?Fix=20cr=C3=A9ation=20db=20al=C3=A9atoire=20La?=
 =?UTF-8?q?=20cr=C3=A9ation=20de=20DB=20=C3=A9tait=20tr=C3=A8s=20longue=20?=
 =?UTF-8?q?car=20il=20y=20avait=20des=20insert=20into=20=20dans=20des=20bo?=
 =?UTF-8?q?ucles.=20Je=20les=20ai=20remplac=C3=A9s=20par=20de=20execute=5F?=
 =?UTF-8?q?many=20qui=20envoies=20plusieurs=20infos=20issues=20d'un=20tabl?=
 =?UTF-8?q?eau=20=C3=A0=20la=20fois.=20Du=20coup=20il=20n'y=20a=20plus=20q?=
 =?UTF-8?q?ue=204=20requ=C3=AAtes.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 test/create_random_db.py | 77 ++++++++++++++++++++++++++--------------
 1 file changed, 50 insertions(+), 27 deletions(-)

diff --git a/test/create_random_db.py b/test/create_random_db.py
index eb78235..fd2eca2 100644
--- a/test/create_random_db.py
+++ b/test/create_random_db.py
@@ -1,18 +1,20 @@
 import sqlite3
 import string
 import sys
-import random
+import os
+from random import random, choice, randint
 
-connection = sqlite3.connect('bdd.db', check_same_thread=False)
-
-def send_sql_request(request, fetchall = 1):
+def send_sql_request(request, fetchall = 1, many = 0, values = []):
     '''Execute sql request on bdd_for_labels database.
     If second parameter is 0 return one line of the response
     else return all lines.
     '''
     global connection
     cursor = connection.cursor()
-    cursor.execute(request)
+    if (many == 0):
+        cursor.execute(request)
+    else:
+        cursor.executemany(request, values)
     connection.commit()
     if (fetchall == 1):
         res = cursor.fetchall()
@@ -20,24 +22,39 @@ def send_sql_request(request, fetchall = 1):
         res = cursor.fetchone()
     return (res)
 
-def random_generator(size=6, chars=string.ascii_uppercase + string.digits):
-    return (''.join(random.choices(string.ascii_uppercase + string.digits, k=N)))
+def create_database():
+    req = [
+        "CREATE TABLE IF NOT EXISTS tutos (title VARCHAR(300),link VARCHAR(500) NOT NULL,date DEFAULT CURRENT_TIMESTAMP,prescriber VARCHAR(100),CONSTRAINT pk_tutos PRIMARY KEY (link));"
+        ,"CREATE TABLE IF NOT EXISTS labels (id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(100) NOT NULL,father_id UNISGNED MEDIUM INT DEFAULT NULL);"
+        ,"CREATE TABLE IF NOT EXISTS labels_languages (id_label INTEGER,country_code VARCHAR(3),name VARCHAR(100),CONSTRAINT pk_labels_languages PRIMARY KEY(id_label, country_code));"
+        ,"CREATE TABLE IF NOT EXISTS tutos_labels (link VARCHAR(200) NOT NULL,id_label UNSIGNED MEDIUM INT,CONSTRAINT pk_tutos_labels PRIMARY KEY(link, id_label));"
+    ]
+    for request in req:
+        send_sql_request(request)
+    #les executer une par une
+
+def random_generator(size=6):
+    return (''.join(choice(string.ascii_uppercase + string.digits) for _ in range(size)))
 
 def create_tutos(nb_tutos):
     name_tutos = []
+    values1 = []
     for i in range (nb_tutos):
-        request = "INSERT INTO tutos (title, link) VALUES ('"+random_generator()+"', '"+"http://"+random_generator(9)+"')"
-        print (request)
-        send_sql_request(request)
+        values1.append([random_generator(), "http://"+random_generator(9)])
+    request = "INSERT INTO tutos (title, link) VALUES (?, ?)"
+    send_sql_request(request, many=1, values=values1)
 
 def create_labels(nb_labels):
+    values1 = []
     for i in range(nb_labels):
-        request = "INSERT INTO labels (name) VALUES ('"+random_generator(7)+"')"
-        print (request)
-        send_sql_request(request)
+        values1.append([random_generator(7)])
+    request = "INSERT INTO labels (name) VALUES (?)"
+    send_sql_request(request, many=1, values=values1)
 
 def link_tutos_labels(nb_tutos, nb_labels):
     all_links = send_sql_request("SELECT link FROM tutos")
+    request = "INSERT INTO tutos_labels (link, id_label) VALUES (?, ?)"
+    values1 = []
     for i in range (nb_tutos):
         nb_local_labels = randint(1, 5)
         all_id_tab = []
@@ -45,29 +62,35 @@ def link_tutos_labels(nb_tutos, nb_labels):
             id_label = randint(1, nb_labels)
             while (id_label in all_id_tab):
                 id_label = randint(1, nb_labels)
-            request = "INSERT INTO tutos_labels (link, id_label) VALUES ('"+all_links[i][0]+"', "+str(id_label)+");"
-            print(request)
-            send_sql_request(request)
+            values1.append([all_links[i][0], id_label])
             all_id_tab.append(id_label)
-        print (str(i)+"/"+str(nb_tutos))
+        # print (str(i)+"/"+str(nb_tutos))
+    send_sql_request(request, many=1, values=values1)
 
 def add_labels_language(nb_labels):
     labels = send_sql_request("SELECT id, name FROM labels")
+    values1 = []
     for i in range(nb_labels):
-        request = "INSERT INTO labels_languages (id_label, country_code, name) VALUES ("+str(labels[i][0])+", 'U', '"+labels[i][1]+"')"
-        print(request)
-        send_sql_request(request)
-        print (str(i)+"/"+str(nb_labels))
+        inter = [str(labels[i][0]), 'U', labels[i][1]]
+        values1.append(inter)
+    request = "INSERT INTO labels_languages (id_label, country_code, name) VALUES (?, ?, ?)"
+    send_sql_request(request, many=1, values=values1)
 
-if (len(sys.argv) == 2):
-    print("exec [nb_tutos] [nb_labels]") if (sys.argv[1] == "-h") else print("bad parameters")
-elif (len(sys.argv) == 3):
-    nb_tutos = int(sys.argv[1])
-    nb_labels = int(sys.argv[2])
+def create_all_db(db_name, nb_tutos, nb_labels):
+    create_database()
     create_tutos(nb_tutos)
     create_labels(nb_labels)
     add_labels_language(nb_labels)
     link_tutos_labels(nb_tutos, nb_labels)
+
+if (len(sys.argv) == 2):
+    print("exec [db_name] [nb_tutos] [nb_labels]") if (sys.argv[1] == "-h") else print("bad parameters")
+elif (len(sys.argv) == 4):
+    db_name = sys.argv[1]
+    nb_tutos = int(sys.argv[2])
+    nb_labels = int(sys.argv[3])
+    connection = sqlite3.connect(db_name, check_same_thread=False)
+    create_all_db(db_name, nb_tutos, nb_labels)
 else:
-    print ("bad parameters, use \"create_random_db.py [nb_tutos] [nb_labels]\"")
+    print ("bad parameters, use \"create_random_db.py [db_name] [nb_tutos] [nb_labels]\"")
 
-- 
GitLab