L'exécution des différentes requêtes à l'aide de mysql-python

Je travaille avec une télécommande db pour l'importation de données à mon Django proyect de la db.

Avec l'aide de MySQLdb j'ai réussi avec la facilité de créer une fonction d'importation comme suit:

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()

Très heureux, fonctionne comme prévu.

Mais en allant sur le code, j'ai remarqué que, parfois, je vais avoir besoin de vous connecter à la db de nouveau, afin d'exécuter d'autres requêtes différentes.

La première idée était tout à fait logique, pour moi:
pour chaque requête, je vais avoir besoin, de définir une fonction qui appelle connect_and_get_data avec la requête donnée en paramètre... quelque chose comme ceci:

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)
    ...

avec ces modifications à connect_and_get_data:

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

Comme vous l'avez déjà peut l'imaginer, cette solutions échoue.

Lecture mluebke, la réponse à la question python mysql fetch requête

"Vous êtes de passage d'arguments à la fonction execute, ne pas faire de python substitution de chaîne"

J'ai compris tout de suite où j'ai eu tort; mais j'ai toujours l'impression qu'il manque quelque chose: j'ai essayé différentes solutions, mais je suis vraiment malheureux avec eux tous.

Est-il un "bon" manière à encapsuler mon connect_and_get_data(query) de la fonction, afin de me servir de la façon dont je le veux, ou je suis totalement dans le mauvais chemin?

Ceux qui sont considérés comme "meilleures pratiques" dans cette situation?

OriginalL'auteur dolma33 | 2011-11-11