2

Python で MySQL データベースにクエリを実行し、ブール値を選択しています。そのため、MySQL からの応答は文字列「True」または「False」のいずれかです。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:

常にTrueを返します

では、MySQL が返す文字列を Python でブール値に変換するにはどうすればよいでしょうか。

現在私は持っています:

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

Pythonでこれを行うためのより良い方法があるに違いないと私は信じています-おそらく私が見逃している単純なものがあります。

4

7 に答える 7

3

MySQL のブール値は TINYINT(1) です。1または0をチェックするとうまくいくかもしれません

于 2009-02-28T23:24:17.010 に答える
2

データベース接続で値を変換する方法がわからない場合は、より適切なものを使用する必要があります。これはあなたが自分でする必要があることではありません。これらが実際のブール値ではなく、0または1のみを格納するint列である場合は、スキーマを修正する必要があります。または、常に「True」と「False」の値を取得している場合は、誤ってどこかの文字列に変換している可能性がありますか?

于 2009-03-01T00:56:37.663 に答える
2

列が常に実際の文字列"False"または"True"(整数などではなく) の 1 つである場合は、次のバリエーションをお勧めします。

value = {'False' : False, 'True' : True}[data]
于 2009-03-01T00:19:40.013 に答える
2

MySQLDdb が値を変換する場所は、MySQLdb ディレクトリの converters.py ファイルにあります。

bool を扱うスニペットは次のとおりです。

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

そして Bool2Str 関数:

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

別の動作が必要な場合は、変換辞書をインポートして変更します。

于 2009-03-02T04:43:23.070 に答える
0

あなたのソリューションは実際にはまったく問題ありませんが、代替手段があります。

Python 2.5 以降を使用している場合は、if ステートメントを短くすることができます。

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

チェックを頻繁に繰り返すことに気付いた場合は、読みやすくするための関数を作成することを検討してください。

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に接続するために何を使用していますか? そこからブール値を直接取得する方法がおそらくあります。質問を更新してください。

于 2009-03-01T16:28:36.970 に答える