Выполнение различных запросов с использованием mysql-python

Я работаю с удаленной базой данных для импорта данных в базу данных моего проекта Django.

С помощью MySQLdb мне удалось с легкостью создать функцию импорта, подобную следующей:

def connect_and_get_data(useful_string):
    CONNECTION = MySQLdb.connect(host=..., port=...,
                                 user=..., passwd=..., db=...,
                                 cursorclass=MySQLdb.cursors.DictCursor,
                                 charset = "utf8")
    cursor = CONNECTION.cursor()
    cursor.execute("SELECT ... FROM ... WHERE ... AND some_field=%s", (useful_string))
    result = cursor.fetchall()
    cursor.close()

Очень доволен, работает, как ожидалось.

Продолжая работу с кодом, я заметил, что иногда мне нужно снова подключиться к базе данных, чтобы выполнить другие запросы.

Первая идея была для меня вполне логичной: для каждого запроса, который мне понадобится, определить функцию, которая вызывает connect_and_get_data с заданным запросом в качестве параметра ... что-то вроде этого :

def get_data_about_first_amazing_topic(useful_string):
    query = "SELECT ... FROM ... WHERE ... AND some_field=%s" %(useful_string)
    connect_and_get_data(query)
    ...

def get_data_about_second_amazing_topic(other_useful_string):
    query = "SELECT ... FROM ... WHERE ... AND some_field=%s" %(other_useful_string)
    connect_and_get_data(query)
    ...

с этими изменениями в connect_and_get_data :

def connect_and_get_data(query):
    ...
    cursor.execute(query)
    ...

Как вы уже могли догадаться, это решение не работает.

Прочитав ответ mluebke на вопрос python mysql fetch query

«Вы передаете аргументы функции выполнения, не выполняя подстановку строки python»

, я сразу понял, в чем я был неправ; но я все еще чувствую, что чего-то не хватает: я пробовал разные решения, но я определенно недоволен всеми из них.

Есть ли "хороший" способ инкапсулировать мою функцию connect_and_get_data (query) , чтобы обслуживать меня так, как я хочу, или я полностью ошибаюсь с этим?

Какие из них считаются "передовыми методами" в этой ситуации?

5
задан Community 23 May 2017 в 12:13
поделиться