2016-06-06 8 views
0

Ich arbeite mit einer angepassten Django-Installation, obwohl das Problem, mit dem ich es zu tun habe, von einem Befehlszeilentool stammt, das die Datenbank aktualisieren soll. Das Tool liest die Datenbank wie gewünscht und funktioniert vergleichbar mit der Eingabe von SELECTs in der MySQL-Befehlszeile. Es scheint jedoch nie zu die Datenbank zu ändern. Ich probierte ein paar Variationen, einschließlich eines Testlaufs von nur die literale Abfrage, die ich für Testzwecke will, aber es tut nichts, scheitert ohne gemeldete Ausnahme oder Fehler. Die MySQL-Befehlszeile verarbeitet Updates vorhersehbar gut.Warum kann mein Python-MySQLdb-Skript meine Datenbank sehen, aber nicht live ändern?

Mein Code, sowohl den Leseorientierten Code enthält, die und die Schreiborientierten Code arbeitet, die leise ausfällt, ist (in hygienisiert Form):

#!/usr/bin/python 

import MySQLdb 
import sys 

connection = MySQLdb.connect(user='root', passwd="_______________") 
cursor = connection.cursor() 
cursor.execute('USE _____________') 

if __name__ == '__main__': 
    if sys.argv[1] == 'check': # This seems to work 
     username = sys.argv[2] 
     cursor.execute(
      '''SELECT username, foo FROM auth_user WHERE username = %s''', 
      [username]) 
     for result in cursor: 
      print 'Username: ' + result[0] 
      print 'Foo: ' + str(result[1]) 
    if sys.argv[1] == 'set': # This seems to function as a noop 
     username = sys.argv[2] 
     foo = int(sys.argv[3]) 
     cursor.execute('UPDATE auth_user SET foo = ' + str(foo) + 
      " WHERE username = '" + username.replace("'", "\\'") + "'") 

Welche weiteren Schritte sollte ich die Aktualisierung tun zu Feld foo auf der angegebenen Zeile? Die Aktualisierungsabfrage ist bewusst verdunkeltes SQL, aber ich möchte mich nicht auf die Komplexität konzentrieren, bevor nicht einmal die literale Version funktioniert.

Danke,

+1

Sie eine unten richtige Antwort haben, aber ich frage mich, warum Sie alles tun dies über direkte SQL und nicht mit Ihren Django-Modellen? –

Antwort

2

Sie müssen Daten bei documentation

cursor.execute('UPDATE auth_user SET foo = ' + str(foo) + " WHERE username = '" + username.replace("'", "\\'") + "'") 
    connection.commit() 

Werfen Sie einen Blick begehen, um mehr Informationen