112 lines
4.2 KiB
Python
112 lines
4.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
import json, pymysql
|
|
|
|
conn = pymysql.connect(
|
|
db='test',
|
|
user='ksv',
|
|
passwd='1234567890',
|
|
host='kis',
|
|
charset='utf8')
|
|
c = conn.cursor()
|
|
|
|
|
|
def createTables(tbl_list):
|
|
global tbl_descr_list, tbl_struct_list
|
|
i = 0
|
|
tbl_names_list = []
|
|
tbl_descr_list = []
|
|
tbl_struct_list = []
|
|
|
|
while i < len(tbl_list):
|
|
one_Table_descr = []
|
|
one_Table_struct = []
|
|
one_Table_relation = []
|
|
tbl_descr = tbl_list[i]["tableDescription"]
|
|
tbl_name = tbl_list[i]["tableName"]
|
|
#field_list = tbl_list[i]["fieldList"][i].keys()
|
|
tbl_names_list.append([tbl_name, tbl_descr])
|
|
one_Table_descr.append(tbl_name)
|
|
one_Table_struct.append(tbl_name)
|
|
|
|
x = 0
|
|
# список всех полей таблицы
|
|
qwery_create = "CREATE TABLE IF NOT EXISTS " + tbl_name + " ("
|
|
index = ""
|
|
field_names_list = []
|
|
struct_fields_list = []
|
|
while x < len(tbl_list[i]["fieldList"]):
|
|
if tbl_list[i]["fieldList"][x]["autoIncrement"] == "yes":
|
|
auto_increment = " AUTO_INCREMENT, "
|
|
else:
|
|
auto_increment = ", "
|
|
qwery_create = qwery_create + tbl_list[i]["fieldList"][x]["fName"] + " " + \
|
|
tbl_list[i]["fieldList"][x]["fType"] + auto_increment
|
|
if tbl_list[i]["fieldList"][x]["index"] == "PRIMARY KEY":
|
|
index = "PRIMARY KEY(" + tbl_list[i]["fieldList"][x]["fName"] + ")"
|
|
field_names_list.append(tbl_list[i]["fieldList"][x]["fDescription"])
|
|
struct_fields_list.append(tbl_list[i]["fieldList"][x]["fName"])
|
|
if tbl_list[i]["fieldList"][x]["relation"]:
|
|
relation_list=[tbl_list[i]["fieldList"][x]["fName"]]
|
|
relation_list.append(tbl_list[i]["fieldList"][x]["relation"])
|
|
|
|
one_Table_relation.append(relation_list)
|
|
x = x + 1
|
|
|
|
qwery_create = qwery_create + index + ");"
|
|
one_Table_struct.append(struct_fields_list)
|
|
one_Table_struct.append(one_Table_relation)
|
|
one_Table_descr.append(field_names_list)
|
|
i = i + 1
|
|
tbl_descr_list.append(one_Table_descr)
|
|
tbl_struct_list.append(one_Table_struct)
|
|
c.execute(qwery_create)
|
|
return tbl_names_list
|
|
|
|
def initDBstructure():
|
|
global tbl_descr_list
|
|
table_list = open("tables.json", "r", encoding="utf-8")
|
|
data = json.load(table_list, encoding="utf-8")
|
|
tbl_list = data["tables"]
|
|
tbl_names_list = createTables(tbl_list)
|
|
|
|
return tbl_names_list
|
|
|
|
# выборка данных из заданной таблицы
|
|
def selectData(tbl):
|
|
global tbl_struct_list
|
|
# если юольше 1 поля добавить CONCAT
|
|
qwery = "SELECT "
|
|
subqwery = ""
|
|
for item in tbl_struct_list:
|
|
if item[0] == tbl:
|
|
for field in item[1]:
|
|
qwery = qwery + field + ","
|
|
for rel in item[2]:
|
|
field = rel[0]
|
|
field_rel = rel[1][0]
|
|
field_replace = rel[1][1]
|
|
field_replace = field_replace.replace(",", ",' ',")
|
|
# определяем название таблицы для вложенного запроса
|
|
table1 = field_rel.split('.')[0]
|
|
field1 = field_rel.split('.')[1]
|
|
if table1 == tbl:
|
|
table1 = table1 + "_1"
|
|
subqwery = tbl + " AS " +table1
|
|
else:
|
|
subqwery = table1
|
|
# составляем подзапрос и подменяем им поле в запросе
|
|
subqwery = "(SELECT CONCAT(" + field_replace + ") FROM " + subqwery +" WHERE "+ table1 + "." + field1 +"="+ tbl +"."+ field +") AS " + field
|
|
qwery = qwery.replace(field, subqwery)
|
|
qwery = qwery.rstrip(',') + " FROM " + tbl + " LIMIT 10000"
|
|
c.execute(qwery)
|
|
|
|
return c.fetchall()
|
|
|
|
# получаем на вход имя таблицы и возвращаем список заголовков полей
|
|
def getTablesStructure(tbl):
|
|
global tbl_descr_list
|
|
for item in tbl_descr_list:
|
|
if item[0] == tbl:
|
|
return item[1]
|
|
|
|
#initDBstructure() |