Ошибки со словарем в pymysql

Я получаю следующую ошибку:

if 'ShazK01' in LogRef.values():
AttributeError: 'list' object has no attribute 'values'

После запуска:

import pymysql 

db = pymysql.connect(host='localhost', ..)
cur = db.cursor() 

def getData():
     LoginInput=[]
     InputUN = ('ShazK01') 
     InputPC = ('passinput') 
     LoginInput=[InputUN, InputPC] 
     return LoginInput


def checkExistence():
     cur = db.cursor(pymysql.cursors.DictCursor)
     cur.execute("SELECT Username FROM LoginDetails") 
     LogRef = cur.fetchall() #fetch ALL login references
     print(LogRef)
     if 'ShazK01' in LogRef.values():
          print("yes")
     else:
          print("no")

LoginInput = getData()
print(LoginInput)            
print(LoginInput[0])
UNInput = LoginInput[0]
print(UNInput)
checkExistence()

Я просмотрел другие ответы, и они не помогли. Итак, любой полезный совет приветствуется, так как я новичок в использовании sql и python вместе, спасибо!


person Jasmine078    schedule 02.02.2015    source источник


Ответы (1)


PyMysql fetchall возвращает список (список словарей здесь - из-за pymysql.cursors.DictCursor). Вам нужно будет написать что-то вроде

from itertools import chain
it = chain.from_iterable(x.values() for x in cur.fetchall())
print('yes' if 'ShazK01' in it else 'no')

or

print('yes' if any('ShazK01' in x.values() for x in cur.fetchall()) else 'no')
person vaultah    schedule 02.02.2015
comment
Как я могу использовать это для поиска другого атрибута в той же строке? Что, если бы я хотел получить значение для SELECT Passcode FROM LoginDetails WHERE Username = 'ShazK01' - person Jasmine078; 02.02.2015
comment
@AnbarHussain Я не понимаю ... Если вы хотите получить только одну строку, вы должны использовать fetchone. Если вы хотите получить совпавший dict объект, вы можете использовать next(x for x in cur.fetchall() if x['Username'] == 'ShazK01') или что-то в этом роде. - person vaultah; 02.02.2015