Seite 1 von 1

Mysql abfrage von tinyint(1)

Verfasst: Donnerstag 14. Januar 2010, 10:38
von redtop
Hallo,

ich bin absoluit kein Programierer aber übe mal etwas :) Als verzeiht mir meine dummen Fragen.

Ich hab schon gesucht aber ich komme nicht weiter, wahrscheinlich ist das Problem so trivial das ich es einfach über sehe.

Ich habe eine Mysql Tabelle mit verschiedenen Werten, unter anderen auch ein tinyint (Bool) Feld.
Wenn ich nun die Datenbank abfrage erhalte ich vom tinyint Feld den Namen und von den anderen Feldern den Inhalt.

Ich will aber auch vom tinyint den Wert True/False oder als 0/1 haben.

So sieht mein Beispiel aus :

Code: Alles auswählen


myconn = MySQLdb.connect(host = "localserver", user ="test" ,  db = "test")     # mit der Datenbank verbinden
cursor = myconn.cursor()
SELECT = "SELECT `Vorname`, `Nachname`, 'MwSt' FROM Kundendatei WHERE `MwSt`= 0 "
cursor.execute(SELECT)
Tabelle = cursor.fetchone()
    
print "SHOW",  Tabelle,  Tabelle[0], Tabelle[1], Tabelle[2],  bool(Tabelle[2])

cursor.close()                      
myconn.close()

Als Ausgabe bekomme ich :
SHOW ('Harald', 'Tester', 'MwSt') Harald Tester MwSt True
Das tinyint Feld "MwSt" ist aber 0 also False ?

Wo mache ich den Fehler.

Stefan[/code]

Verfasst: Donnerstag 14. Januar 2010, 11:36
von redtop
Hat sich erledigt ich hatte, warum auch immer bei MwSt die falschen Anführungszeichen verwendet.

Man ist das kleinlich :)

Stefan

Verfasst: Donnerstag 14. Januar 2010, 12:43
von Hyperion
redtop hat geschrieben:Hat sich erledigt ich hatte, warum auch immer bei MwSt die falschen Anführungszeichen verwendet.

Man ist das kleinlich :)
Ich wußte gar nicht, dass man überhaupt Anführungszeichen um Spaltennamen setzen muss... lass sie doch einfach weg ;-)

Verfasst: Donnerstag 14. Januar 2010, 12:46
von redtop
Nee ne,

Ich habe die Syntax aus myMysqlAdmin übenommen und deswegen hatte die gesetzt. :oops:

Stefan

Verfasst: Freitag 15. Januar 2010, 13:53
von mkesper
Gibt's mit mysqldb keine Möglichkeit, parametrisierte Queries zu erstellen? So ist das ja eine Einladung für SQL-Injections.

Verfasst: Freitag 15. Januar 2010, 14:36
von redtop
Wieso ?

Ist doch nur eine Abfrage, die aus einer Liste generiert wird.

Gruss Stefan

Verfasst: Freitag 15. Januar 2010, 15:15
von glaslos
Es geht, ist aber in dem Fall nicht notwendig. Ich mache es aber trotzdem immer um es nicht irgend wann zu vergessen :)

Verfasst: Freitag 15. Januar 2010, 15:25
von jens

Verfasst: Montag 18. Januar 2010, 07:41
von redtop
mkesper hat geschrieben:Gibt's mit mysqldb keine Möglichkeit, parametrisierte Queries zu erstellen? So ist das ja eine Einladung für SQL-Injections.
Das war auch nur ein Beispiel. Dewr richtige Code sieht dann anders aus und ich verwende Parametrisierte SQL-Queries.
z.B so :

Code: Alles auswählen

        SELECT = "SELECT * FROM %s " %Auswahl
        print "SELECT",  SELECT
        self.c.execute(SELECT)
        Test = self.s.fetchone(SELECT)
        print "Test",  Test
        for row in iter(self.c.fetchone, None):
               
            for index in range (0, 3):
                count = self.c.rownumber -1
                id = str(row[0])
                self.list_ctrl_db.SetStringItem(count, 0, id)
                self.list_ctrl_db.SetStringItem(count, 1, row[2])
                self.list_ctrl_db.SetStringItem(count, 2, row[1])
Ich hoffe es stehen jetzt keinem die Haare zu Berge, wenn er sieht was ich hier zusammen hacke :oops:

Gruss Stefan

Verfasst: Montag 18. Januar 2010, 08:35
von mkesper
Ich habe deshalb gefragt, weil es mir aus der Doku von mysqldb nicht gleich ins Auge sprang. Danke für den Wiki-Link!

Verfasst: Montag 18. Januar 2010, 17:17
von jens
redtop hat geschrieben:Das war auch nur ein Beispiel. Dewr richtige Code sieht dann anders aus und ich verwende Parametrisierte SQL-Queries.
z.B so :

Code: Alles auswählen

        SELECT = "SELECT * FROM %s " %Auswahl
        print "SELECT",  SELECT
        self.c.execute(SELECT)
Das ist aber falsch! Es ist nur eine normale String Operation, siehe: http://wiki.python-forum.de/String-Formatter

Bei execute müßten die Parameter übergeben werden!

Verfasst: Montag 18. Januar 2010, 22:03
von BlackJack
@jens: Das ist schon richtig, denn mit parametrisierten SQL-Anfragen kann man nur *Werte* einsetzen, keine Tabellennamen.

Verfasst: Dienstag 19. Januar 2010, 09:59
von jens
Ups, das hab ich übersehen ;)