2017-03-22 21 views
0

クエリによって返された電子メールが空であるかどうかを確認したいと思います。私は次のコードを使用しています:Mysql - Pythonでクエリ結果と文字列を比較する

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 

アドバイスはありますか?

答えて

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,)) 
1

result_setは、最初のタプルにアクセスする配列である: result_set[0] =>実際にあなたの空の文字列あなたを与えるだろう(例えばresult_set[0][0]を介して)最初の要素へのアクセス1.

の長さを有し、(u'',)実際に探しています。

0

テーブルの既存の値を確認するには、私はCOUNTクエリをお勧めします

query = "SELECT COUNT(email) FROM u_code WHERE code = %s" 
cursor.execute(query, [code,]) 

# COUNT query always return value, if no matching data 
# it simply return integer value 0, so we can safely take data 
# from result[0] 
result_check = cursor.fetchone() 

if not result_check[0]: 
    print("empty email") 
    result = 1; 
else: 
    print("email taken") 
    result = 0 

print "result: " + str(result) 
関連する問題