Я работаю с удаленной базой данных для импорта данных в базу данных моего проекта 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)
, чтобы обслуживать меня так, как я хочу, или я полностью ошибаюсь с этим?
Какие из них считаются "передовыми методами" в этой ситуации?