In diesem Artikel wird hauptsächlich die Analyse von MySQL-Datenmigrationsmethoden und -tools vorgestellt. Der Artikel stellt sie anhand von Beispielcode sehr ausführlich vor, was einen gewissen Referenzwert für das Studium oder die Arbeit aller hat. Freunde, die sie benötigen, können darauf zurückgreifen. Datenmigration ist eine der Aufgaben, die jedes Backend bewältigen muss. Dieser Artikel stellt einige gängige Methoden und Tools zur Datenmigration vor. mysqldump: Datenmigration ohne Änderung der Datenstruktur Daten exportieren mysqldump -u root -p DATENBANKNAME Tabellenname > dump.sql Daten wiederherstellen mysql -u root -p DATENBEZEICHNUNG < dump.sql Oder verbinden Sie sich mit dem MySQL-Client mysql> Quelldump.sql Stellen Sie mit pymysql eine Verbindung zur Datenbank her Datenbank, die direkt mit Benutzername und Passwort verbunden werden kann Klasse GeneralConnector: def __init__(selbst, Konfiguration, return_dic=Falsch): selbst.return_dic = return_dic self.config = Konfiguration def __enter__(selbst): self.conn = pymysql.connect(**self.config, Port=3306) wenn self.return_dic: # Eine Datenzeile wird zu einem Wörterbuch self.cursor = self.conn.cursor(pymysql.cursors.DictCursor) anders: selbst.cursor = selbst.conn.cursor() returniere self.cursor def __exit__(selbst, *args): selbst.cursor.schließen() selbst.conn.commit() selbst.conn.close() verwenden: # local_db = { # 'Benutzer': 'root', # 'passwd': '', # 'Host': '127.0.0.1', # "db": "lokale_db" # } mit GeneralConnector(const.local_db, return_dic=True) als Cursor: cursor.execute('WÄHLEN Sie `col1`, `col2` AUS Test;') return cursor.fetchall() Herstellen einer Verbindung zu einer Datenbank auf einem Server, der eine SSH-Verbindung erfordert Klasse SSHConnector: def __init__(selbst, Server, Konfiguration, return_dic=Falsch): self.return_dic=Rückgabewert self.server = Server self.config = Konfiguration def __enter__(selbst): self.conn = pymysql.connect(**self.config, port=self.server.local_bind_port) wenn self.return_dic: # Eine Datenzeile wird zu einem Wörterbuch self.cursor = self.conn.cursor(pymysql.cursors.DictCursor) anders: selbst.cursor = selbst.conn.cursor() returniere self.cursor def __exit__(selbst, *args): selbst.cursor.schließen() selbst.conn.commit() selbst.conn.close() verwenden: #SERVER = SSHTunnelForwarder( # (Remote-Host, SSH-Port), # ssh_username=BENUTZERNAME, # ssh_pkey=SSH_SCHLÜSSEL, # ssh_private_key_password=SSH_KEY_PASSWD, # remote_bind_address=('127.0.0.1', 3306) # MySQL-Dienststandort# ) # server_db = { # 'Benutzer': 'root', # 'passwd': '', # 'Host': '127.0.0.1', # 'db': 'server_db' # } # Erstellen Sie einen Tunnel, um das MySQL des Servers mit const.SERVER als Server an den lokalen Port 3306 zu binden: mit SSHConnector(server, const.server_db) als Cursor: cursor.execute('Tabellen anzeigen;') Daten = Cursor.fetchall() drucken(Daten) Verschiedene Cursoroperationen 1.cursor.execute(SQL-Anweisung) Ausführen einer SQL-Anweisung 2. cursor.fetchall() Holen Sie sich alle Ergebnisse des Cursors, häufig verwendet nach der Select-Anweisung 3. cursor.fetchone() Holen Sie sich das erste Ergebnis des Cursors 4. Cursor.lastrowid Die letzte Daten-ID 5.cursor.executemany(Einfügeanweisung, Datenliste) Batch-Einfügen einer Datenmenge, wie z. B. mit const.SERVER als Server: mit connector.Connector(server, const.db_1) als Cursor: cursor.execute('wähle * aus den Einstellungen aus') Einstellungen = Cursor.fetchall() mit connector.Connector(server, const.db_2) als Cursor: cursor.executemany('in Präferenzwerte (`id`,`theme`,`user_id`) einfügen (%s,%s,%s)', Einstellungen) Ergebnisse vom Listentyp vom Cursor abrufen cursor.execute('WÄHLEN Sie `Name` AUS Benutzer;') Die direkte Verwendung von fetchall() kann nur die in Tupel verpackten Daten abrufen cursor.fetchall() # (('Jack',), ('Ben')) Jetzt möchte ich eine Liste mit Ergebnismengen erhalten, genau wie flat=True in Django Es gibt zwei Möglichkeiten Listenverständnis name_list = [x[0] für x in cursor.fetchall()] Der Nachteil dieser Methode besteht darin, dass sie zuerst fetchall() verwendet, um den Ergebnisset in den Speicher zu lesen und ihn dann in eine Liste umzuwandeln, was nicht effizient ist. itertools Name_Liste = Liste(itertools.chain.from_iterable(cursor)) Diese Methode wird empfohlen. Erstens werden dabei nicht alle Ergebnisse in den Speicher geladen. Zweitens ist die Verwendung von itertools zum Generieren von Listen schneller als die Listenableitung. So verwenden Sie Django-Modelle bei der Datenmigration
Betriebssystem importieren Django importieren System importieren sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) os.environ.setdefault("DJANGO_SETTINGS_MODULE", "übersetzen.settings") django.setup() Django stellt über eine lokale Weiterleitung in einem SSH-Tunnel eine Verbindung zu einer Remote-Datenbank her Erstellen Sie einen SSH-Tunnel, um die Remote-Datenbank einem lokalen Port zuzuordnen ssh -L local_port:localhost:<Remote-MySQL-Port> <Benutzername>@<Remote-Host> Wenn die SSH-Verbindung besteht, können Sie auf die Remote-Datenbank zugreifen, indem Sie auf den lokalen Port zugreifen Konfigurieren Sie die Datenbank in den Django-Einstellungen DATENBANKEN = { 'Standard': { 'ENGINE': 'django.db.backends.mysql', 'NAME': Datenbankname, 'USER': remote_mysql_user, # Passwort für Remote-Datenbankkonto 'PASSWORD': remote_mysql_password, 'HOST': "lokaler Host", 'PORT': local_port, # Die Remote-Datenbank ist dem lokalen Port 'OPTIONS' zugeordnet: {'init_command': 'SET default_storage_engine=INNODB;'} } } Wenn Sie das Django-Modell verwenden, greifen Sie an diesem Punkt über den SSH-Tunnel auf die Remote-Datenbank zu Vorsichtsmaßnahmen
Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: JavaScript Canvas zeichnet dynamische Drahtgittereffekte
Vorwort Alle Anfragen in Tomcat werden von Servle...
Inhaltsverzeichnis Array-Deduplizierung 1. from()...
Wenn die Tabelle breit ist, kann es zu einem Über...
Die Elemente in einem HTML-Dokument werden hinter...
Inhaltsverzeichnis Mehrere MySQL-Instanzen Übersi...
Überblick über die Alibaba Cloud Security Group F...
Damit die Tabelle den Bildschirm (den verbleibende...
Vorwort binlog ist eine binäre Protokolldatei, di...
1. Beschreibung des Versprechens Promise ist ein ...
Vorwort: Das am häufigsten verwendete logische My...
Nachdem Sie einen Container lokal erstellt haben,...
Inhaltsverzeichnis forEach() Methode So springen ...
Vorwort Ich habe vor kurzem eine Feuerwerksanimat...
Pixel Auflösung Mit der Monitorauflösung ist eige...
Das enctype-Attribut des FORM-Elements gibt den Ko...