Python中如何判断字符串是否存在于SQL查询返回的fetchall结果中
问题根因
cursor.fetchall() 返回的是由查询行记录组成的列表,每一行记录都会被封装为元组格式,哪怕一行仅包含1个查询字段,也会是单元素元组。你当前的result实际值为[('bfuqua',)],列表中存储的元素是('bfuqua',)这个元组,而非'bfuqua'字符串,因此直接判断'bfuqua' in result会返回False。
可用解决方案
- 方案1:遍历所有行全字段匹配(适用需要扫描所有查询字段的场景)
target = 'bfuqua' unique = True for row in result: if target in row: unique = False break if not unique: print('That user name already exists. Please try again.')
- 方案2:提取指定字段匹配(仅校验user_name,避免无关字段干扰)
target = 'bfuqua' # 提取所有行的第一个字段(即user_name)组成新列表 user_name_list = [row[0] for row in result] if target in user_name_list: unique = False print('That user name already exists. Please try again.')
- 方案3:SQL层面直接校验(性能最优,推荐使用)
不需要拉取全量用户数据到本地做判断,直接通过带条件的计数查询完成校验,同时用参数化查询避免SQL注入风险:
check_sql = 'SELECT COUNT(*) FROM users WHERE user_name = %s' cursor = connection.cursor() # 用参数化方式传参,不要直接拼接SQL cursor.execute(check_sql, (target,)) exist_count = cursor.fetchone()[0] cursor.close() if exist_count > 0: unique = False print('That user name already exists. Please try again.')
内容的提问来源于stack exchange,提问作者Ben Fuqua
相关产品推荐
相关产品推荐

