Code refactoring (use format() command for generate qwery string, rename some variables)
This commit is contained in:
parent
339e353b2b
commit
a4528dccef
97
dm.py
97
dm.py
|
@ -88,11 +88,11 @@ def dbConnect():
|
|||
return c
|
||||
|
||||
def createTables(tbl_list):
|
||||
global tbl_descr_list, tbl_struct_list, c, db_type
|
||||
global dbTablesDescriptionList, dbTablesStructList, c, db_type
|
||||
i = 0
|
||||
tbl_names_list = []
|
||||
tbl_descr_list = []
|
||||
tbl_struct_list = []
|
||||
dbTablesNamesList = []
|
||||
dbTablesDescriptionList = []
|
||||
dbTablesStructList = []
|
||||
|
||||
while i < len(tbl_list):
|
||||
one_Table_descr = []
|
||||
|
@ -101,7 +101,7 @@ def createTables(tbl_list):
|
|||
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])
|
||||
dbTablesNamesList.append([tbl_name, tbl_descr])
|
||||
one_Table_descr.append(tbl_name)
|
||||
one_Table_struct.append(tbl_name)
|
||||
|
||||
|
@ -165,14 +165,14 @@ def createTables(tbl_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)
|
||||
dbTablesDescriptionList.append(one_Table_descr)
|
||||
dbTablesStructList.append(one_Table_struct)
|
||||
#print(qwery_create)
|
||||
c.execute(qwery_create)
|
||||
return tbl_names_list
|
||||
return dbTablesNamesList
|
||||
|
||||
def initDBstructure():
|
||||
global tbl_descr_list, template_file, tblNamesList
|
||||
global dbTablesDescriptionList, template_file, tblNamesList
|
||||
table_list = open(template_file, "r", encoding="utf-8")
|
||||
data = json.load(table_list, encoding="utf-8")
|
||||
tbl_list = data["tables"]
|
||||
|
@ -182,11 +182,11 @@ def initDBstructure():
|
|||
|
||||
# выборка данных из заданной таблицы
|
||||
def selectData(tbl):
|
||||
global tbl_struct_list, c, db_type
|
||||
global dbTablesStructList, c, db_type
|
||||
# если юольше 1 поля добавить CONCAT
|
||||
qwery = "SELECT "
|
||||
subqwery = ""
|
||||
for item in tbl_struct_list:
|
||||
for item in dbTablesStructList:
|
||||
if item[0] == tbl:
|
||||
for field in item[1]:
|
||||
field = field[0]
|
||||
|
@ -195,8 +195,6 @@ def selectData(tbl):
|
|||
field = rel[0]
|
||||
field_rel = rel[1][0]
|
||||
field_replace = rel[1][1]
|
||||
#field_replace = field_replace.replace(",", ",' ',")
|
||||
#field_replace = field_replace.replace(",", " || ")
|
||||
# определяем название таблицы для вложенного запроса
|
||||
table1 = field_rel.split('.')[0]
|
||||
field1 = field_rel.split('.')[1]
|
||||
|
@ -208,38 +206,43 @@ def selectData(tbl):
|
|||
# составляем подзапрос и подменяем им поле в запросе
|
||||
if db_type == "mysql":
|
||||
field_replace = field_replace.replace(",", ",' ',")
|
||||
subqwery = "(SELECT CONCAT(" + field_replace + ") FROM " + subqwery + " WHERE " + table1 + "." + field1 + "=" + tbl + "." + field + ") AS " + field
|
||||
#subqwery = "(SELECT CONCAT(" + field_replace + ") FROM " + subqwery + " WHERE " + table1 + "." + field1 + "=" + tbl + "." + field + ") AS " + field
|
||||
subqwery = "(SELECT CONCAT({}) FROM {} WHERE {}.{}={}.{}) AS {}"\
|
||||
.format(field_replace,subqwery,table1,field1,tbl,field,field)
|
||||
elif db_type == "sqlite":
|
||||
field_replace = field_replace.replace(",", " || ' ' ||")
|
||||
subqwery = "(SELECT (" + field_replace + ") FROM " + subqwery +" WHERE "+ table1 + "." + field1 +"="+ tbl +"."+ field +") AS " + field
|
||||
#subqwery = "(SELECT (" + field_replace + ") FROM " + subqwery +" WHERE "+ table1 + "." + field1 +"="+ tbl +"."+ field +") AS " + field
|
||||
subqwery = "(SELECT ({}) FROM {} WHERE {}.{}={}.{}) AS {}" \
|
||||
.format(field_replace, subqwery, table1, field1, tbl, field, field)
|
||||
qwery = qwery.replace(field, subqwery)
|
||||
qwery = qwery.rstrip(',') + " FROM " + tbl + " LIMIT 10000"
|
||||
#qwery = qwery.rstrip(',') + " FROM " + tbl + " LIMIT 10000"
|
||||
qwery = '{} FROM {} LIMIT 10000'.format(qwery.rstrip(','), tbl)
|
||||
#print(qwery)
|
||||
c.execute(qwery)
|
||||
return c.fetchall()
|
||||
|
||||
# получаем на вход имя таблицы и возвращаем список заголовков полей
|
||||
def getTableStructure(tbl):
|
||||
global tbl_descr_list, tbl_struct_list
|
||||
#print(tbl_descr_list)
|
||||
#print(tbl_struct_list)
|
||||
for item in tbl_descr_list:
|
||||
global dbTablesDescriptionList, dbTablesStructList
|
||||
#print(dbTablesDescriptionList)
|
||||
#print(dbTablesStructList)
|
||||
for item in dbTablesDescriptionList:
|
||||
if item[0] == tbl:
|
||||
return item[1]
|
||||
|
||||
# Получаем список названий полей и типов для заданной таблицы
|
||||
def getFields(tbl):
|
||||
global tbl_descr_list, tbl_struct_list
|
||||
#print(tbl_descr_list)
|
||||
#print(tbl_struct_list)
|
||||
for item in tbl_struct_list:
|
||||
global dbTablesDescriptionList, dbTablesStructList
|
||||
#print(dbTablesDescriptionList)
|
||||
#print(dbTablesStructList)
|
||||
for item in dbTablesStructList:
|
||||
if item[0] == tbl:
|
||||
#print(item[1])
|
||||
return item[1]
|
||||
# Ищем описание поля по его названию и возвращаем.
|
||||
def getFieldDescription(tbl, field):
|
||||
global tbl_descr_list, tbl_struct_list
|
||||
for item in tbl_descr_list:
|
||||
global dbTablesDescriptionList, dbTablesStructList
|
||||
for item in dbTablesDescriptionList:
|
||||
if item[0] == tbl:
|
||||
for i in item[1]:
|
||||
if i[0] == field:
|
||||
|
@ -263,10 +266,10 @@ def fieldTypeConvert(ftype):
|
|||
return fType
|
||||
|
||||
def getFieldType(tbl, field):
|
||||
global tbl_descr_list, tbl_struct_list
|
||||
#print(tbl_descr_list)
|
||||
#print(tbl_struct_list)
|
||||
for item in tbl_struct_list:
|
||||
global dbTablesDescriptionList, dbTablesStructList
|
||||
#print(dbTablesDescriptionList)
|
||||
#print(dbTablesStructList)
|
||||
for item in dbTablesStructList:
|
||||
if item[0] == tbl:
|
||||
for i in item[1]:
|
||||
if i[0] == field:
|
||||
|
@ -276,12 +279,12 @@ def getFieldType(tbl, field):
|
|||
#return item[1]
|
||||
|
||||
def getRelationsForField(tblSearch, fieldName):
|
||||
global tbl_struct_list, c, db_type
|
||||
global dbTablesStructList, c, db_type
|
||||
#print("Ищем связи для:" +tblSearch +','+ fieldName)
|
||||
#print(tbl_struct_list)
|
||||
#print(dbTablesStructList)
|
||||
#searchField = tblSearch + '.' + fieldName
|
||||
dataList = []
|
||||
for item in tbl_struct_list:
|
||||
for item in dbTablesStructList:
|
||||
#print(item)
|
||||
tblName = item[0]
|
||||
for field in item[1]:
|
||||
|
@ -348,11 +351,11 @@ def insertDataIntoBD(dataList):
|
|||
# Выборка данных по значению
|
||||
# принимает на вход название таблицы, назване поля, значение этого поля
|
||||
def selectDataFromDB(tblName, fieldName, fieldValue):
|
||||
global tbl_struct_list, c, db_type
|
||||
global dbTablesStructList, c, db_type
|
||||
qwery = "SELECT "
|
||||
subqwery = ""
|
||||
|
||||
for item in tbl_struct_list:
|
||||
for item in dbTablesStructList:
|
||||
if item[0] == tblName:
|
||||
for field in item[1]:
|
||||
field = field[0]
|
||||
|
@ -372,23 +375,29 @@ def selectDataFromDB(tblName, fieldName, fieldValue):
|
|||
# составляем подзапрос и подменяем им поле в запросе
|
||||
if db_type == "mysql":
|
||||
fieldReplace = fieldReplace.replace(",", ",' ',")
|
||||
subqwery = "(SELECT CONCAT(" + fieldReplace + ") FROM " + subqwery + " WHERE " + table1 + "." + field1 + "=" + tblName + "." + field + ") AS " + field
|
||||
#subqwery = "(SELECT CONCAT(" + fieldReplace + ") FROM " + subqwery + " WHERE " + table1 + "." + field1 + "=" + tblName + "." + field + ") AS " + field
|
||||
subqwery = '(SELECT CONCAT({}) FROM {} WHERE {}.{}={}.{}) AS {}'\
|
||||
.format(fieldReplace, subqwery, table1, field1, tblName, field, field)
|
||||
elif db_type == "sqlite":
|
||||
fieldReplace = fieldReplace.replace(",", " || ' ' ||")
|
||||
subqwery = "(SELECT (" + fieldReplace + ") FROM " + subqwery +" WHERE "+ table1 + "." + field1 +"="+ tblName +"."+ field +") AS " + field
|
||||
#subqwery = "(SELECT (" + fieldReplace + ") FROM " + subqwery +" WHERE "+ table1 + "." + field1 +"="+ tblName +"."+ field +") AS " + field
|
||||
subqwery = '(SELECT ({}) FROM {} WHERE {}.{}={}.{}) AS {}'\
|
||||
.format(fieldReplace, subqwery, table1, field1, tblName, field, field)
|
||||
#print("---" + subqwery)
|
||||
qwery = qwery.replace(field, subqwery)
|
||||
#qwery = qwery.rstrip(',') + " FROM " + tblName + " LIMIT 10000"
|
||||
qwery = qwery.rstrip(',') + " FROM " + tblName + " WHERE " + fieldName + '=' + fieldValue
|
||||
#qwery = qwery.rstrip(',') + " FROM " + tblName + " WHERE " + fieldName + '=' + fieldValue
|
||||
qwery = '{} FROM {} WHERE {}={}'.format(qwery.rstrip(','), tblName, fieldName, fieldValue)
|
||||
|
||||
#print(qwery)
|
||||
c.execute(qwery)
|
||||
return c.fetchall()
|
||||
|
||||
def selectRelationsDataFromDB(tblSearch, fieldName, fieldValue):
|
||||
global tbl_struct_list, c, db_type
|
||||
global dbTablesStructList, c, db_type
|
||||
searchField = tblSearch + '.' + fieldName
|
||||
dataList = []
|
||||
for item in tbl_struct_list:
|
||||
for item in dbTablesStructList:
|
||||
tblName = item[0]
|
||||
for field in item[1]:
|
||||
field = field[0]
|
||||
|
@ -415,7 +424,6 @@ def getTablesDescriptionOfName(tblName):
|
|||
# Удаление записи из БД
|
||||
def deleteRecordsFromDB(tableName, valueList):
|
||||
global c, db_type
|
||||
|
||||
qwery = 'DELETE FROM {} WHERE '.format(tableName)
|
||||
print(qwery)
|
||||
subQwery=''
|
||||
|
@ -423,10 +431,11 @@ def deleteRecordsFromDB(tableName, valueList):
|
|||
for item in getFields(tableName):
|
||||
print(item[0], item[1])
|
||||
if item[1] == 'integer':
|
||||
subQwery = subQwery + item[0] + '=' + valueList[i] + ' AND '
|
||||
#subQwery = subQwery + item[0] + '=' + valueList[i] + ' AND '
|
||||
subQwery = '{}{}={} AND'.format(subQwery, item[0], valueList[i])
|
||||
else:
|
||||
subQwery = subQwery + item[0] + '=\'' + valueList[i] + '\' AND '
|
||||
#subQwery = '{}'.format(subQwery,item[0])
|
||||
#subQwery = subQwery + item[0] + '=\'' + valueList[i] + '\' AND '
|
||||
subQwery = "{}{}='{}' AND ".format(subQwery, item[0], valueList[i])
|
||||
i += 1
|
||||
qwery += subQwery
|
||||
print(qwery)
|
||||
|
|
54
gui.py
54
gui.py
|
@ -303,8 +303,8 @@ class EditForm(QMainWindow):
|
|||
#relForm.setParent(self)
|
||||
|
||||
# обработка нажатия на списке таблиц БД
|
||||
def clickTablesList(tbl_name, tblDataWidget, data='NULL'):
|
||||
global tblList, tabRelationsData
|
||||
def clickTablesList(dbTableName, tblDataWidget, data='NULL'):
|
||||
global dbTablesList, tabRelationsData
|
||||
# удаляем все открытые табы
|
||||
i=0
|
||||
if tabRelationsData.count():
|
||||
|
@ -316,18 +316,18 @@ def clickTablesList(tbl_name, tblDataWidget, data='NULL'):
|
|||
tabRelationsData.removeTab(i)
|
||||
i += 1
|
||||
|
||||
addDataIntoTable(dm.getTablesNameOfDescription(listTables.model().data(listTables.currentIndex())), tblDataWidget)
|
||||
addDataIntoTable(dm.getTablesNameOfDescription(listDBTables.model().data(listDBTables.currentIndex())), tblDataWidget)
|
||||
# Пишем название активной таблицы БД в строку статуса, эадакая замена глобальной переменной
|
||||
# как оно и где вылезет будем посмотреть.
|
||||
tblDataWidget.setStatusTip(dm.getTablesNameOfDescription(listTables.model().data(listTables.currentIndex())))
|
||||
tblDataWidget.dbTableName = dm.getTablesNameOfDescription(listTables.model().data(listTables.currentIndex()))
|
||||
tblDataWidget.setStatusTip(dm.getTablesNameOfDescription(listDBTables.model().data(listDBTables.currentIndex())))
|
||||
tblDataWidget.dbTableName = dm.getTablesNameOfDescription(listDBTables.model().data(listDBTables.currentIndex()))
|
||||
|
||||
# вставка данных в табличный виджет
|
||||
def addDataIntoTable(tbl_name, tblDataWidget, data='NULL'):
|
||||
global tblList, tabRelationsData
|
||||
def addDataIntoTable(dbTableName, tblDataWidget, data='NULL'):
|
||||
global dbTablesList, tabRelationsData
|
||||
if data == 'NULL':
|
||||
data = dm.selectData(tbl_name)
|
||||
fieldNames = dm.getTableStructure(tbl_name)
|
||||
data = dm.selectData(dbTableName)
|
||||
fieldNames = dm.getTableStructure(dbTableName)
|
||||
#print(fieldNames)
|
||||
# проверка на наличие записей в таблице
|
||||
if data:
|
||||
|
@ -345,7 +345,7 @@ def addDataIntoTable(tbl_name, tblDataWidget, data='NULL'):
|
|||
fName = item[0]
|
||||
fDescr = item[1]
|
||||
#### определяем наличие связей и добавляем дополнительные столбцы
|
||||
####print(fName, fDescr, dm.getRelationsForField(tbl_name, fName))
|
||||
####print(fName, fDescr, dm.getRelationsForField(dbTableName, fName))
|
||||
# установка заголовков столбцов таблицы
|
||||
tblDataWidget.setHorizontalHeaderItem(n, QTableWidgetItem(fDescr))
|
||||
n += 1
|
||||
|
@ -432,30 +432,30 @@ def showMenuToolbar(window):
|
|||
|
||||
# форма для добавления новой записи
|
||||
def addNewRecord():
|
||||
global listTables, tblRelationsData
|
||||
tblDescr = listTables.model().data(listTables.currentIndex())
|
||||
for i in tblList:
|
||||
global listDBTables, tblRelationsData
|
||||
tblDescr = listDBTables.model().data(listDBTables.currentIndex())
|
||||
for i in dbTablesList:
|
||||
if i[1] == tblDescr:
|
||||
tblName = i[0]
|
||||
|
||||
#print(tblName)
|
||||
editForm = EditForm(tblName, tblDescr)
|
||||
editForm.show()
|
||||
#editForm.setParent(listTables)
|
||||
#editForm.setParent(listDBTables)
|
||||
#editForm.show()
|
||||
#editForm.setParent(tblRelationsData)
|
||||
#editForm = Example()
|
||||
|
||||
# отображение списка связанных данных
|
||||
def showRelationsRecords(fieldIndex, fieldValue):
|
||||
global tabRelationsData, listTables
|
||||
tblDescr = listTables.model().data(listTables.currentIndex())
|
||||
global tabRelationsData, listDBTables
|
||||
tblDescr = listDBTables.model().data(listDBTables.currentIndex())
|
||||
i=0
|
||||
if tabRelationsData.count():
|
||||
while i <= tabRelationsData.count():
|
||||
tabRelationsData.removeTab(i)
|
||||
i = i+1
|
||||
for i in tblList:
|
||||
for i in dbTablesList:
|
||||
if i[1] == tblDescr:
|
||||
tblName = i[0]
|
||||
|
||||
|
@ -481,15 +481,15 @@ def showRelationsRecords(fieldIndex, fieldValue):
|
|||
tblRelationsData.setStatusTip(tbl)
|
||||
|
||||
def main():
|
||||
global tblList, listTables, tabRelationsData
|
||||
global dbTablesList, listDBTables, tabRelationsData
|
||||
app = QApplication(sys.argv)
|
||||
mainWin = QMainWindow()
|
||||
workArea = QWidget()
|
||||
mainWin.setCentralWidget(workArea)
|
||||
hbox = QHBoxLayout()
|
||||
listTables = QListWidget()
|
||||
listTables.setFrameShape(QFrame.StyledPanel)
|
||||
listTables.setFixedWidth(200)
|
||||
listDBTables = QListWidget()
|
||||
listDBTables.setFrameShape(QFrame.StyledPanel)
|
||||
listDBTables.setFixedWidth(200)
|
||||
# выводим список таблиц в левом поле
|
||||
tblData = MyTable()
|
||||
tblData.setFrameShape(QFrame.StyledPanel)
|
||||
|
@ -498,7 +498,7 @@ def main():
|
|||
|
||||
#tabRelationsData.setFrameShape(QFrame.StyledPanel)
|
||||
splitter1 = QSplitter(Qt.Horizontal)
|
||||
splitter1.addWidget(listTables)
|
||||
splitter1.addWidget(listDBTables)
|
||||
splitter2 = QSplitter(Qt.Vertical)
|
||||
splitter2.addWidget(tblData)
|
||||
splitter2.addWidget(tabRelationsData)
|
||||
|
@ -506,13 +506,13 @@ def main():
|
|||
hbox.addWidget(splitter1)
|
||||
workArea.setLayout(hbox)
|
||||
showMenuToolbar(mainWin)
|
||||
listTables.itemClicked.connect(lambda: clickTablesList(dm.getTablesNameOfDescription(listTables.model().data(listTables.currentIndex())), tblData))
|
||||
listDBTables.itemClicked.connect(lambda: clickTablesList(dm.getTablesNameOfDescription(listDBTables.model().data(listDBTables.currentIndex())), tblData))
|
||||
|
||||
tblList = dm.initDBstructure()
|
||||
for i in tblList:
|
||||
listTables.addItem(i[1])
|
||||
dbTablesList = dm.initDBstructure()
|
||||
for i in dbTablesList:
|
||||
listDBTables.addItem(i[1])
|
||||
#tblData = QTableWidget()
|
||||
print(dm.getTablesNameOfDescription(listTables.model().data(listTables.currentIndex())))
|
||||
print(dm.getTablesNameOfDescription(listDBTables.model().data(listDBTables.currentIndex())))
|
||||
|
||||
|
||||
mainWin.setGeometry(300, 300, 800, 600)
|
||||
|
|
Loading…
Reference in New Issue
Block a user