我想检查查询返回的电子邮件是否为空。我使用以下代码:
query = "select email from u_code where code = '"+code+"'"
cursor.execute(query)
result_set = cursor.fetchall()
length = cursor.rowcount
if (length==1):
print ' result: ' + str(result_set[0]) + ' OK'
print ' length of result: ' + str(len(result_set[0]))
if (result_set[0] == ''):
print("empty email")
result = 1;
else:
print("email taken")
result = 0
print "result: " + str(result)
输出错误。它应该返回1,因为电子邮件字段为空
result: (u'',) OK
length of result: 1
email taken
result: 0
有什么建议吗?
答案 0 :(得分:1)
result_set是一个数组,您可以访问第一个元组:
result_set[0]
=> (u'',)
确实长度为1.
访问第一个元素(例如通过result_set[0][0]
)将为您提供实际需要的空字符串。
答案 1 :(得分:1)
.fetchall()
返回元组列表。所以你的病情永远不会得到满足。
您可以这样做:
if (result_set[0][0] == ''):
print("empty email")
result = 1;
else:
print("email taken")
result = 0
或者更简单地使用.fetchone()
:
result_set = cursor.fetchone()
if (result_set[0] == ''):
print("empty email")
result = 1;
else:
print("email taken")
result = 0
此外,您应该像这样查询您的数据库,以避免SQL注入攻击的可能性:
query = "select email from u_code where code = %s"
cursor.execute(query,(code,))
答案 2 :(得分:0)
为了检查表中的现有值,我建议使用COUNT查询
<meta charset="UTF-8">