1
votes

Comment obtenir le résultat du 'for x in myresult: print (x [0])' dans une variable

En gros, lorsque ma commande SQL obtient des données pour la base de données, elle sort comme ceci [('admin',)]

pour x dans mon résultat: imprimer (x [0]) J'ai découvert que cela l'imprimera en tant qu'administrateur, c'est comme ça que je le veux, mais j'ai besoin d'un enregistrement dans une variable telle que le nom d'utilisateur

def login (): mydb = mysql.connector.connect (

host="localhost",
user="root",
passwd="password",
database="testdb",
)


username=input("Please Enter Your username:     ") 

mycursor = mydb.cursor()


mycursor.execute ("SELECT name FROM account_database WHERE name = 'admin' ")

myresult = mycursor.fetchall()
print(myresult)
mydb.commit()
mycursor.close()

for x in myresult:
    print(x[0])


1 commentaires

Je suppose que ma question est de savoir comment obtenir le résultat de for x dans mon résultat: print (x [0]) enregistré dans une variable


3 Réponses :


0
votes

Vous avez écrit:

import pprint
...
names = [name
         for name, in myresult]

pprint.pprint(names)

Suite à cela, x est toujours dans la portée, vous pouvez donc utiliser des expressions impliquant x à votre guise.

Supposons que votre variable préférée est v . Ensuite, après la boucle, vous pouvez attribuer par exemple:

... WHERE name LIKE 'a%'

Une meilleure façon d'exprimer votre boucle serait de décompresser le tuple:

for name, in myresult:
    print(name)

v = name

Ici, nous décompressons un 1-tuple dans la variable chaîne name . Une requête plus sophistiquée demandant deux colonnes pourrait utiliser: pour le nom, l'âge dans mon résultat:

Maintenant, votre requête actuelle utilise un test d'égalité donc il retournera zéro ou une ligne (et l'affectation v échouerait dans le cas de la ligne zéro "non trouvé"). Imaginez qu'au lieu de trouver simplement 'admin' votre clause WHERE demandait tous les noms commençant par a:

v = x[0]

Ensuite, il serait plus approprié de rassembler un liste de noms:

for x in myresult:
    print(x[0])


0 commentaires

0
votes

Le myresult que vous avez obtenu de myresult = mycursor.fetchall () est une liste de tuples.

Avec for x dans myresult: code >, x reçoit chaque tuple de myresult , l'un après l'autre. Et avec x [0] vous accédez alors au premier élément de ces tuples.

Dans votre cas, il n'y a qu'un seul tuple, avec une seule valeur. Cela a du sens car votre SQL sélectionne le nom de tous les enregistrements qui ont le nom 'admin' - vous vérifiez essentiellement s'il y a des utilisateurs avec le nom ' admin '. On ne sait pas pourquoi vous voulez obtenir ce nom, car il sera 'admin' pour chaque enregistrement.

Vous pouvez y accéder directement comme ceci:

mycursor.execute ("SELECT COUNT(name) FROM account_database WHERE name = 'admin'")
myresult = mycursor.fetchone()
print(f'There are {myresult[0]} users named \'admin\'')

ie assignez la première valeur du premier enregistrement de myresult à admin_name , mais ce serait soit la même chose que admin_name = 'admin' , soit générer un message d'erreur s'il n'y a pas d'utilisateur nommé 'admin' dans la base de données.

Pour vérifier cela:

if len(myresult) == 0:
    print('There is no user named \'admin\'')
else:
    print('There is a user named \'admin\')

Remarque: si vous souhaitez uniquement voir s'il existe des enregistrements portant ce nom, vous n'avez pas besoin non plus de .fetchall () , vous pouvez simplement utiliser .fetchone () . Ou vous pouvez même simplement exécuter une requête qui évite complètement les erreurs:

admin_name = myresult[0][0]


0 commentaires

0
votes

Ajoutez les valeurs à une liste.

final = []
for x in myresult:
    print(x[0])
    final.append(x[0])


0 commentaires