2009-02-28 6 views
2

Python'da bir MySQL veritabanını sorgulamak ve bir boole değeri seçmek - dolayısıyla MySQL'den gelen yanıt ya "Doğru" veya "Yanlış" dizesidir. MySQL'in boolean değerine dayanarak daha fazla kod yürütmek istiyorum.Python'da MySQL booleans ile çalışma

E.g.

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 

Ama bunu yapamaz çünkü

if data: 

hep dönecektir Gerçek

yüzden MySQL Python bir boole içine dönen olduğunu dize dönüştürmek nasıl?

Şu anda var:

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

Python bunu yapmanın daha iyi bir yolu olmalı inanmak - olasılıkla ben eksik basit bir şey var.

cevap

2

MySQL'de Boolean, TINYINT'tir (1). sütun her zaman o zaman bazı değişiklikler öneriyoruz gerçek dizeleri (tamsayılar ya da bir şey aksine) "False" veya "True" biriyse

+0

Teşekkür !. Bunun nasıl çalışacağından emin değilim. Spesifik olarak MySQL, şu anda True veya False değerini döndürüyor. Onu bir Int'e dönüştürmenin bir yolu var mı? İşte bir örnek SQL sorgusu SELECT IsRegistered FROM Users WHERE email = "[email protected]"; Bu Doğru veya Yanlış döndürür. Bunu bir int için nasıl yapabilirim? –

+0

Sorunun boş bir grup mu yoksa şimdi mi döndürüp döndürmediğini kontrol etmek için tek bir satır getirebilirsiniz. Orijinal SELECT'in hemen ardından "SELECT FOUND_ROWS()" değerinin de çalıştırılması ve getirilmesi de gerekir. – Imran

2

işe yarayabilecek 1 veya 0 denetleniyor: Eğer

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

senin db bağlantısı, sizin için değerleri nasıl dönüştüreceğinizi bilmiyor, daha iyi bir tane kullanmanız gerekiyor. Bu kendin yapman gereken bir şey olmamalı. Bunlar gerçek booller değil, sadece bir int sütunu sadece 0 veya 1 depolarsa, şemanızı düzeltmeniz gerekir. Alternatif olarak, her zaman 'Doğru' ve 'Yanlış' değerlerini alırsanız, belki de yanlışlıkla bir yere bir dizeye dönüştürüyorsunuz?

0

Çözümün aslında oldukça Tamam, ama alternatifler vardır: Eğer tekrar kendini bulgu varsa

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

:

Python 2.5 veya üzeri kullanıyorsanız, sen eğer ifadeyi kısaltabilirsiniz buna daha okunabilir hale getirmek için için bir işlev yazma düşünebilirsiniz, genellikle kontrol edin:

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" 

bir sözlükle aynı şeyi elde edebilirsiniz ama bunu bulmuyorum şık olarak:

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

if mysql_bool[data]: 
    print "Success" 

Bu, DB'ye bağlanmak için ne kullanıyorsunuz? Muhtemelen buradan bir bool almanın bir yolu vardır. Lütfen Sorunuzu güncelleyin!

2

MySQLDdb dosyasının MySQLdb dizinindeki converters.py dosyasındaki değerleri dönüştürdüğü yeri bulabilirsiniz.

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

Ve Bool2Str fonksiyonu:

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

farklı davranış istiyorsanız

, dönüşümler dict içe ve bunu değiştirmek

burada bool ile uğraşan snippet'ine.

0

Bu, MySQLdb tarafından döndürüldüğü şekilde işlenir.

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

bu Sen Unicode gösteren bir tamsayı dönmek ord kullanabilirsiniz Python 3,6

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

için çalışır doğrulanmadı.

Örnek:

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

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