【问题标题】:Errors with dictionary in pymysqlpymysql中的字典错误
【发布时间】:2015-04-01 20:22:39
【问题描述】:

我收到以下错误:

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 的初学者,谢谢!

【问题讨论】:

    标签: python mysql dictionary pymysql


    【解决方案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')
    

    print('yes' if any('ShazK01' in x.values() for x in cur.fetchall()) else 'no')
    

    【讨论】:

    • 如何使用它来搜索同一行中的另一个属性?如果我想获取“SELECT Passcode FROM LoginDetails WHERE Username='ShazK01'”的值怎么办
    • @AnbarHussain 我不明白......如果你只想得到一行,你会使用fetchone。如果你想得到匹配的dict 对象,你可以使用next(x for x in cur.fetchall() if x['Username'] == 'ShazK01') 或类似的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 2019-08-01
    相关资源
    最近更新 更多