0
votes

Obtention d'une erreur lors de l'exécution d'une instruction SQL SELECT en Python

Je suis nouveau dans ce domaine et j'essaie d'apprendre le python. J'ai écrit une instruction select en python où j'ai utilisé un paramètre

Select """cln.customer_uid = """[(num_cuid_number)])

TypeError: les indices de chaîne doivent être des entiers


3 commentaires

Pouvez-vous modifier votre message avec le reste du code? Cette erreur pourrait venir d'ailleurs.


ajoutez votre code ... nous avons besoin de plus d'informations pour vous aider


Ce n'est pas du code Python. Veuillez nous montrer le code Python.


3 Réponses :


0
votes

D'accord avec les autres, cela ne ressemble pas vraiment à Python en soi.

Je verrai même sans voir le reste de ce code, je devinerai que la ou les [(num_cuid_number)] valeur (s) renvoyée (s) est une chaîne, vous voudrez donc la convertir en entier pour que l'instruction select soit traitée .


0 commentaires

0
votes

num_cuid_number est probablement une chaîne dans votre code; les indices de chaîne sont ceux entre crochets. Veuillez donc d'abord vérifier votre variable de données pour voir ce que vous y avez reçu. De plus, je pense que num_cuid_number est une chaîne, alors qu'elle devrait être dans une valeur entière.

Permettez-moi de vous donner un exemple pour le code python à exécuter: (Juste pour la référence : J'ai utilisé SQLAlchemy avec flask)

@app.route('/get_data/')
def get_data():

base_sql="""
    SELECT cln.customer_uid='%s' from cln
""" % (num_cuid_number)

data = db.session.execute(base_sql).fetchall()


0 commentaires

0
votes

À peu près sûr que vous essayez de créer une instruction select avec une clause "where" ici. Il y a plusieurs façons de faire cela, par exemple en utilisant raw sql, la requête doit ressembler à ceci:

query = cln.select()
query = query.where(cln.customer_uid == num_cuid_number)
results = db.execute(query)

séparer les paramètres de la requête est sécurisé. Vous pouvez ensuite prendre ces 2 variables et les exécuter avec votre moteur de base de données comme

results = db.execute(query, parameters)

Cela fonctionnera, cependant, surtout en Python, il est plus courant d'utiliser un package comme SQLAlchemy pour rendre les requêtes plus "flexibles" (en d'autres termes, sans construire manuellement une chaîne réelle comme chaîne de requête). Vous pouvez faire la même chose en utilisant la fonctionnalité principale de SQLAlchemy

query = "SELECT * FROM cln WHERE customer_uid = %s"
parameters = (num_cuid_number,)

Remarque: j'ai simplifié "db" dans les deux exemples, vous utiliseriez en fait un curseur, une session, un moteur ou similaire à exécutez vos requêtes, mais ce n'était pas votre question.


0 commentaires