Normalerweise benutze ich Django, um mich voll und ganz in die Vorteile des O / R-Mappers zu vertiefen. Wenn ich also nicht gut darin bin Datenoperationen, die ausgeführt werden können, ohne SQL-Anweisungen in eine Tabelle zu schreiben, die nichts mit Django zu tun hat Können Sie sagen "Sir, ja, Sir!", Wenn Sie gefragt werden, ob Sie es versuchen möchten? Ich könnte nicht! Dann habe ich mein Bestes versucht, damit ich es zusammenfassen kann! Qiita Artikel beginnt!
Um ehrlich zu sein, ändert sich das, was Sie tun, in keiner Sprache. Wenn Sie sich also an eine erinnern, können Sie es auch in anderen Sprachen anwenden. Ich denke es wird funktionieren.
Wenn Sie Django verwenden, haben Sie einen MySQL-Connector, oder? Okay, als nächstes! (Ich mag, welches besser ist, also lasse ich es weg) Derzeit ist dieser Artikel für MySQL-Python 1.2.5.
>>> import MySQLdb
>>>> conn = MySQLdb.connect(host='hoge_host', user='hoge_user', passwd='hogehoge', db='hoge1')
Lassen Sie uns vorerst eine Verbindung herstellen! MySQLdb hat connection () und connect (), verwendet jedoch connect (). der Grund ist,
>>> conn = MySQLdb.connection(host='hoge_host', user='hoge_user', passwd='hogehoge', db='hoge1')
>>> print type(conn)
<type '_mysql.connection'>
>>> conn = MySQLdb.connect(host='hoge_host', user='hoge_user', passwd='hogehoge', db='hoge1')
>>> print type(conn)
<class 'MySQLdb.connections.Connection'>
Ja, verstehst du Wenn Sie eine Verbindung mit connection () herstellen, wird _mysql.connection angezeigt Beim Herstellen einer Verbindung mit connect () wurde ein MySQLdb.connections.Connection-Objekt erstellt.
Die _mysql-Klasse wird in die Basisklasse von MySQLdb eingeschlossen und die Funktion zu MySQLdb hinzugefügt. Da der Cursor in MySQLdb implementiert ist, ist connect () die Option für die Verbindung. Seien Sie vorsichtig, denn hier macht es süchtig! (Obwohl ich connect () verwende, gibt es viele Trap-Beispiele, bei denen der Variablenname connection ist!)
Wenn Sie eine Verbindung herstellen können, versuchen wir es so schnell wie möglich mit der SELECT-Anweisung. Danach werde ich unter der Annahme schreiben, dass es ein verbundenes conn-Objekt gibt.
cursor = conn.cursor()
try:
cursor.execute('select * from hoge_table where id=1')
result = cursor.fetchall()
finally:
cursor.close()
conn.close()
Was ist ein Cursor? Ein Konzept, das nicht mit einem Wort gesagt werden kann. Wirklich ein Konzept. Einige Leute erklären, dass es sich um einen virtuellen Bereich handelt, in dem mehrere Vorgänge in der Datenbank nacheinander ausgeführt werden können. Denken Sie so darüber nach. Wenn Sie es richtig wissen wollen, gehen Sie im Netz ans Meer! Sie können SQL mit conn.query ('select ~') ausgeben, ohne es zu verwenden. Da es nicht möglich ist, Transaktionen für mehrere Operationen auszuführen, werden häufig Cursor für DB-Operationen verwendet.
Darüber hinaus kann die SQL-Anweisung nicht nur durch Ausgabe als Objekt, sondern als Ergebnismenge abgerufen werden. Du musst es bekommen. Das wird cursor.fetchall () sein. Es gibt auch fetchone () und fetchmany (), aber ich denke, Sie können sie bei Bedarf richtig verwenden.
Die abgerufenen Daten sind beispielsweise eine Tabelle hoge_table
id | name | hoge |
---|---|---|
1 | hogee | Es ist hoge |
2 | hogege | Es ist hoge? |
damit,
cursor.execute('select * from hoge_table')
result = cursor.fetchall()
Wenn Sie nehmen (grob weggelassen), ist der Inhalt des Ergebnisses
((1, 'hogee', 'Es ist hoge'), (2, 'hogege', 'Es ist hoge?'))
Es wird sein. e? Wie lautet der Spaltenname? Sie könnten gedacht haben, ** Es ist süß ** Vielen Dank an O / R Mapper und erstellen Sie Ihre eigene Liste mit Spaltennamen.
Schließlich gibt die finally-Klausel den Cursor und die Verbindung frei. ** Bukkake mit Klausel ** Es ist jedoch kein Verlust, es als Methode zu kennen. In anderen Sprachen muss ich es selbst schreiben. ~~ Nun, es bricht nicht so sehr, auch wenn ich es nicht veröffentliche! ~~ Es ist die Pflicht des Programmierers, wertvolle Ressourcen unverzüglich freizugeben
Lassen Sie uns als nächstes aktualisieren. Wäre es nicht praktisch, wenn wir Batch-Updates mit Batch-Verarbeitung von Python-Skripten durchführen könnten?
conn = MySQLdb.connect(host='hoge_host', user='hoge_user', passwd='hogehoge', db='hoge1')
conn.autocommit(False)
cursor = conn.cursor()
try:
cursor.execute('update hoge_table set hoge="Es ist hoge!" where id=1')
cursor.execute('select * from hoge_table')
result = cursor.fetchall()
conn.commit()
except Exception as e:
conn.rollback()
raise e
finally:
cursor.close()
conn.close()
In der zweiten Zeile wird das automatische Festschreiben auf "Falsch" gesetzt, aber es ist sicherlich die Standardeinstellung "Falsch". Es ist daher nicht erforderlich zu sagen, dass dies nicht erforderlich ist. Nun, es kann vom Connector abhängen, daher ist es sicherer, ihn explizit auf False zu setzen. Wenn Sie es auf True setzen, wird es ohne Erlaubnis festgeschrieben (das ist richtig). Wenn False, rufen Sie commit () selbst auf. Wir rufen auch selbst rollback () auf. Es ist sicherer, so viel Zeit und Mühe zu investieren, wenn Sie dies hinter den Kulissen tun können.
Die SELECT-Anweisung wird in der Zeile nach der UPDATE-Anweisung ausgegeben. Dies kann jedoch die Validierung des Aktualisierungsergebnisses sein. Damit können Sie es schaffen! Dies ist ein Beispiel. Wenn Ihnen das Ergebnis nicht gefällt, machen Sie eine Ausnahme und lassen Sie es zurücksetzen. Da dieser Bereich nicht ohne Verwendung eines Cursors erstellt werden kann, ist connect () weiterhin eine Option. Dies wird in der Datenbank durch Aufrufen der Funktion commit () widergespiegelt.
Das ist alles für diese Zeit. Damit plötzlich DB-Betrieb ohne O / R-Mapper Selbst wenn eine Aufgabe eingeht, können wir sie erledigen. Auch die Tatsache, dass das Framework normalerweise in Ihrem Namen handelt, ist eine Frage des Inhalts. Ich denke, dass das Wissen darüber zum weiteren Verständnis beiträgt.
"Warte eine Minute! Es gibt kein EINFÜGEN oder LÖSCHEN"
Was zu tun ist, unterscheidet sich nicht wesentlich von UPDATE, daher wird es weggelassen
"Warte eine Minute! Es gibt keine ÄNDERUNG"
Müssen Sie es mit einem Skript tun?
Recommended Posts