猿问

结果列表到元组(如描述中所述,使用 tuple 函数)并且结果元组需要位于列表中

我想检查输入的密码是否与数据库中存储的密码相同,但是当我使用它时,bcrypt.checkpw()它会返回一个错误,指出它需要一个字符串或字节,因为 SQL 查询返回一个元组。我找不到将数据库响应转换为元组中的字节以使其兼容的方法。


sql = ''' SELECT password FROM user_data WHERE username=? '''


username = input('Input username: ')

password = bytes(input('Input Password: '), encoding='utf-8')


cur = conn.cursor()

cur.execute(sql, (username,))

rows = cur.fetchall()


for row in rows:


    if bcrypt.checkpw(password, row):

        details = (user_id, username, password)

        print('logged in')


        return details


        break


月关宝盒
浏览 112回答 4
4回答

德玛西亚99

def compress(data):    result = []        keys = tuple(data[0].keys()) # the keys    result.append(keys)    result2 = []    result2.append(tuple([data[0][key] for key in keys]))    result2.append(tuple([data[1][key] for key in keys[::-1]]))    result.append(result2)    return tuple(result)data = [    {"a": 1, "b": 2, "c": 3},    {"a": 4, "c": 6, "b": 5}]print(compress(data))印刷:(('a', 'b', 'c'), [(1, 2, 3), (6, 5, 4)])

湖上湖

应该def compress(data):    res = []    for idx, sub in enumerate(data, start=0):        if idx == 0:            res.append(tuple(sub.keys()))            res.append([])            res[-1].append(tuple(sub.values()))        else:            res[-1].append(tuple(sub.values()))    return tuple(res)

HUX布斯

所以我创建了你想要的东西,你可以把它放在一个函数中,如果你愿意的话data = [    {"a": 1, "b": 2, "c": 3},    {"a": 4, "c": 6, "b": 5}]keys = [[],[]]for d in data:    items = list(d.items())    l = []    for i in items:        l.append(i[1])        if i[0] not in keys[0]:            keys[0].append(i[0])        else:            continue    keys[1].append(tuple(l))keys = tuple(keys)

肥皂起泡泡

使用列表理解:def compress(data):  keys = tuple(sorted(data[0].keys()))  values = [tuple(d[k] for k in keys) for d in data]  return (keys, values)>>> compress([{"a": 1, "b": 2, "c": 3},{"a": 4, "c": 6, "b": 5}])(('a', 'b', 'c'), [(1, 2, 3), (4, 5, 6)])可选:缺少钥匙如果某些字典中可能缺少某些键,您可以使用所有字典中的所有键,然后使用 删除重复的键set,然后使用d.get(k, default_value)代替d[k]:def compress(data, default_value=None):  keys = tuple(sorted(set(k for d in data for k in d.keys())))  values = [tuple(d.get(k, default_value) for k in keys) for d in data]  return (keys, values)>>> data = [{'a':1, 'b': 2, 'c': 3}, {'a':11, 'b':12, 'd':14}]>>> compress(data, 0)(('a', 'b', 'c', 'd'), [(1, 2, 3, 0), (11, 12, 0, 14)])可选:存储此数据的另一种方式您可以将此字典列表重构为列表字典:def refactor(data):  keys = data[0].keys()  return { k: [d[k] for d in data] for k in keys }>>> refactor([{"a": 1, "b": 2, "c": 3},{"a": 4, "c": 6, "b": 5}]){'a': [1, 4], 'b': [2, 5], 'c': [3, 6]}同样,您可以小心丢失密钥:def refactor(data):  keys = set(k for d in data for k in d.keys())  return { k: [d[k] for d in data if k in d] for k in keys }>>> refactor([{'a':1, 'b': 2, 'c': 3}, {'a':11, 'b':12, 'd':14}]){'d': [14], 'a': [1, 11], 'c': [3], 'b': [2, 12]}
随时随地看视频慕课网APP

相关分类

Python
我要回答