2009-02-28 20 views
2

私はPythonでMySQLデータベースにクエリを行い、ブール値を選択しています。つまり、MySQLからの応答は文字列 'True'または 'False'です。 MySQLのブール値に基づいてさらにコードを実行したいと思います。PythonでMySQLブール値を操作する

など。

data = 'False' # assume this is what was returned by MySQL. 
if data: 
    print 'Success' #really this would be where I would execute other if True. 
else: 
    print 'Fail' #really this would be where I would execute other code if False 

しかし、私はこれを行うことはできませんので

if data: 

が常に戻ります真の

だから私は、MySQLのpythonのbooleanに戻っていることを文字列に変換する方法を教えてください。

現在、私が持っている:

data = 'False' # assume this is what was returned by MySQL. 
if data == 'True': 
    print 'Success' 
else: 
    print 'Fail' 

私はPythonでこれを行うには良い方法がなければならないと考えている - そう、私が行方不明です単純なものがあります。

答えて

2

MySQLのブール値はTINYINT(1)です。カラムは、常に実際の文字列"False"または"True"の一つである場合は1または0の確認は

+0

感謝!私はそれがどのように動作するかわからない。具体的には、MySQLは現在TrueまたはFalseを返しています。それをIntにキャストする方法はありますか?ここでは、サンプルのSQLクエリです。SELECT IsRegistered FROM users where email = "[email protected]"; TrueまたはFalseを返します。どのようにしてintにキャストできますか? –

+0

1行をフェッチして、クエリが空のセットを返すかどうかを確認できます。 元のSELECTの直後に「SELECT FOUND_ROWS()」の値を実行してフェッチする必要があります。 – Imran

2

を働くかもしれない(整数か何かではなく)、私は上のいくつかのバリエーションをお勧めします:あなたの場合は

value = {'False' : False, 'True' : True}[data] 
2

db connectionは値を変換する方法を知らないので、より良いものを使う必要があります。これはあなた自身がする必要があるものであってはなりません。これらが実際のブール値ではなく、0または1を格納するint列のみの場合は、スキーマを修正する必要があります。代わりに、あなたはいつも 'True'と 'False'の値を取得すると、誤ってそれをどこかの文字列に変換しているのでしょうか?

0

あなたのソリューションは、実際には非常にOKですが、選択肢があります:あなたは、繰り返し自分を見つけている場合は

print 'Success' if data == 'True' else 'Fail' 

あなたは、Python 2.5以降を使用している場合は、if文を短くすることができますが頻繁にチェックし、それはそれを読みやすくするためにのためにあなたは、関数を書いて検討するかもしれない:

def is_true(mysql_boolean): 
    if mysql_boolean == "True": 
     return True 
    else: 
     return False 

# now you can use this: 
if is_true(data): 
    # this is really going to be more than one line of code anyway. 
    # or maybe a function call, in which your solution might be enough. 
    print "Success" 
else: 
    print "Fail" 

あなたは辞書と同じことを実現することができますが、私はこれを見つけることができません。エレガントで:

mysql_bool = {'True': True, 'False': False} 

if mysql_bool[data]: 
    print "Success" 

あなたはDBに接続するために何を使用していますか?おそらくそこからブールを直接取得する方法があります。あなたの質問を更新してください!

2

MySQLdbディレクトリのconverters.pyファイルの値をMySQLDdbが変換する場所を見つけることができます。ここ

はブール値を扱うの抜粋です:

conversions = { 
    ... 
    types.BooleanType: Bool2Str, 
    ... 
} 

そしてBool2Str機能:

def Bool2Str(s, d): return str(int(s)) 

あなたは異なる動作をする場合は、変換用辞書をインポートし、それを変更します。

0

これは、MySQLdbによって返される方法を処理します。

if data == '\x01': 
    print 'Success' 
else: 
    print 'Fail' 

は、これはあなたがUnicodeを表す整数を返しordを使用することができますPythonの3.6

if data == b'\x01': 
    print('Success') 
else: 
    print('Fail') 
0

のために動作確認しました。

例:

if ord(data): 
    print("True") 

if not ord(data): 
    print("False")