Oracle
 sql >> Base de données >  >> RDS >> Oracle

API de base de données :comment gérer la condition multiple where en Python

Vous devez utiliser des paramètres SQL pour chaque valeur.

Pour le in déclaration, cela signifie que vous devez générer les paramètres :

sql = 'select * from tbl where params1=:params1 and params2=:params2 and params3 in ({})'.format(
    ', '.join(['params3_' + str(i) for i in range(len(params3_value))])

où je suppose que params3_value est une liste de valeurs à tester params3 contre. Si params3_value est de 3 éléments (comme ['v1', 'v2', 'v3'] ) alors le SQL généré ressemblera à :

select * from tbl where params1=:params1 and params2=:params2 and params3 in (:params3_0, :params3_1, :params3_2)

Passez ensuite ces paramètres au cursor.execute() appeler :

params = {'params1': params1_value, 'params2': params2_value}
for i, val in enumerate(params3_value):
    params['params3_' + str(i)] = value
cursor.execute(sql, {params})

J'ai utilisé le :name style de paramètre SQL nommé ici car c'est ce que le cx_Oracle les usages. Consultez la documentation de votre connecteur de base de données pour connaître les styles de paramètres exacts pris en charge.

Le :named Le style de paramètre SQL nommé nécessite que vous transmettiez des paramètres sous forme de dictionnaire, de sorte que le code ci-dessus génère les bonnes clés pour la params3_value articles.