Question

Je suis en train de vous connecter chaque instruction SQL exécutée à partir de mes scripts. Cependant, je contemple un problème que je ne peux pas surmonter.

Est-il possible de calculer la déclaration réelle SQL après variables de liaison ont été spécifiées. En SQLite je devais calculer l'instruction à exécuter manuellement, en utilisant le code ci-dessous:

def __sql_to_str__(self, value,args):
    for p in args:
        if type(p) is IntType or p is None:
            value = value.replace("?", str(p) ,1)
        else:
            value = value.replace("?",'\'' + p + '\'',1)
    return value

Il semble cx_Oracle a cursor.parse () installations. Mais je ne peux pas comprendre comment duper cx_Oracle pour calculer ma requête avant son exécution.

Était-ce utile?

La solution

La requête est jamais calculé comme une seule chaîne. Le texte de la requête et les params sont jamais interpolée et ne produisent pas une vraie chaîne complète avec les deux.

C'est toute la question de l'utilisation des requêtes paramétrées - vous séparez la requête à partir des données - la prévention des injections sql et les limites d'un seul coup, et permettant l'optimisation des requêtes facile. La base de données obtient à la fois séparément et fait ce qu'il doit faire, sans jamais les joindre ensemble.

Cela dit, vous pouvez générer la requête vous, mais notez que la requête que vous générez, bien que probablement équivalent, n'est pas ce exécuté en réalité sur la base de données.

Autres conseils

Votre meilleur pari est de le faire au niveau du serveur de base de données, depuis un connecteur Oracle correctement mis en œuvre ne sera pas mis les variables de liaison dans une chaîne avant d'envoyer la requête au serveur. Voyez si vous pouvez trouver un paramètre de serveur Oracle qui le rend journal les requêtes qu'il exécute.

Vous voudrez peut-être envisager d'utiliser fonctionnalité de trace SQL étendue d'Oracle pour cela. Je recommande de commencer ici: http: //carymillsap.blogspot .com / 2011/01 / new-papier-maîtrise-performance with.html .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top