mySQL Абстрактные похожие запросы - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть mySQL сервер, который в настоящее время имеет 5 таблиц. Основная таблица Parts имеет ~ 15 атрибутов (я знаю, что это много, но это то, чего хочет клиент), из которых 5 являются внешними ключами таблиц Distributors, Categories, Manufacturers. В настоящее время я пытаюсь взломать API flask, который может позволить нам начинать заполнять базу данных вставками, но я думаю, что мне не хватает большого количества повторяющегося кода. Я попытался создать эту функцию, чтобы проверить, было ли значение уже в связанной таблице, и вставить его, если его нет:

#This function checks if an entry already exists in the related table, if it doesn't one is added
def relate_id_tables(data, curr, paramName, TableName, IdName):
    param = data[paramName]
    curr.execute("Select %s FROM %s WHERE Name = %s",(IdName, TableName, param,))
    ParamId = curr.fetchone()
    if ParamId == None:
        curr.execute("INSERT INTO %s(%s, name) Values(Null, %s);", (TableName, IdName, param,));
        conn.commit()
        curr.execute("Select %s FROM %s WHERE Name = %s",(IdName, TableName, param,))
        Row = curr.fetchone()
        return Row[IdName]
    else:
        return ParamId

Моя общая идея заключалась в том, что для стандартной вставки есть 5 других таблиц, которые я Я собираюсь проверить уже есть значения, поэтому абстрагирование, как это, кажется хорошей практикой разработки. Конечно, это приводит к синтаксической ошибке mySQL, потому что параметризация имен таблиц или столбцов является большой нет, нет (что я понимаю сейчас). Есть ли какие-либо обходные пути или более эффективные подходы, кроме буквального копирования этого кода в 5 различных функций, которые отличаются только именами параметров? Приложение будет иметь одного пользователя, поэтому я не слишком озабочен SQL инъекцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...