Я работаю с удаленной базой данных для импорта данных в базу данных моего 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)
...
Как вы уже могли себе представить, это решение не помогает.
Чтение ответа Млюбке на вопрос запрос выборки Python MySQL
«Вы передаете аргументы в функцию execute, а не подстановку строки Python»
Я сразу понял, где был неправ;но я все еще чувствую, что чего-то не хватает: я пробовал разные решения, но я определенно недоволен всеми из них.
Есть ли "хороший" способ инкапсулировать мой connect_and_get_data(query)
функция, чтобы служить мне так, как я хочу, или я совершенно не на этом пути?
Какие из них считаются «лучшими практиками» в этой ситуации?