[PYTHON] Speichern Sie SQLite3-Daten und migrieren Sie zu MySQL

Einführung

Ich hatte es mit Django als persönlichem Produkt zu tun und arbeitete standardmäßig mit SQLite3, aber wie üblich dachte ich, ich sollte zu MySQL wechseln, und wenn ich mit dem folgenden Befehl arbeitete, trat häufig ein Fehler auf. Ich konnte nicht damit umgehen, ohne es zu wissen, also ist es wie ein Memo

$ python manage.py dumpdata --indent 4 > dump.json
#Ändern Sie die Richtung der Datenbank
$ python manage.py loaddata dump.json

Umgebung

Daten aus SQLite3 sichern

$ sqlite3 db.sqlite3 .dump > dump.sql

Oder

$ sqlite3 db.sqlite3
sqlite> .output ./dump.sql
sqlite> .dump

Sie sollten jetzt eine Datei wie dump.sql im angegebenen Verzeichnis haben.

Konvertieren Sie SQL-Daten für SQLite3, damit sie in MySQL verwendet werden können

Da es nicht in MySQL verwendet werden kann, muss es konvertiert werden.

http://www.redmine.org/attachments/download/6239/sqlite3-to-mysql.py

Redmine hat einen schönen vorbereitet! Vielen Dank! !! Ich dachte, aber das Skript selbst ist nur mit Python2 kompatibel.

Es scheint jedoch, dass print Python3 nicht unterstützt, daher habe ich es ein wenig umgeschrieben.

sqlite3-to-mysql.py


#! /usr/bin/env python

import sys

def main():
    print("SET sql_mode='NO_BACKSLASH_ESCAPES';")
    lines = sys.stdin.read().splitlines()
    for line in lines:
        processLine(line)

def processLine(line):
    if (
        line.startswith("PRAGMA") or 
        line.startswith("BEGIN TRANSACTION;") or
        line.startswith("COMMIT;") or
        line.startswith("DELETE FROM sqlite_sequence;") or
        line.startswith("INSERT INTO \"sqlite_sequence\"")
       ):
        return
    line = line.replace("AUTOINCREMENT", "AUTO_INCREMENT")
    line = line.replace("DEFAULT 't'", "DEFAULT '1'")
    line = line.replace("DEFAULT 'f'", "DEFAULT '0'")
    line = line.replace(",'t'", ",'1'")
    line = line.replace(",'f'", ",'0'")
    in_string = False
    newLine = ''
    for c in line:
        if not in_string:
            if c == "'":
                in_string = True
            elif c == '"':
                newLine = newLine + '`'
                continue
        elif c == "'":
            in_string = False
        newLine = newLine + c
    print(newLine)

if __name__ == "__main__":
    main()

Ich habe nur die Grammatik von "print" geändert. Kein Problem, wenn Sie den Unterschied zwischen Python 2 und 3 kennen

Konvertieren

$ cat dump.sql | python sqlite3-to-mysql.py > mysql.sql

Wenn Sie es so aussehen lassen, sollten Sie einen Typen namens "mysql.sql" haben.

Setzen Sie MySQL ein

$ mysql -u USERNAME -p
mysql> CREATE DATABASE hoge CHARACTER SET utf8mb4;
mysql> USE hoge;
mysql> source /path/to/mysql.sql;

Schließlich

Als Einschränkung scheinen Sonderzeichen (Piktogramme usw.) nach der Konvertierung nicht gut zu funktionieren. Wenn Sie sich also nicht mit solchen Dingen befassen müssen, warum versuchen Sie es nicht?

Recommended Posts

Speichern Sie SQLite3-Daten und migrieren Sie zu MySQL
Komprimieren Sie Python-Daten und schreiben Sie in SQLite
[AWS] Migrieren Sie Daten von DynamoDB nach Aurora MySQL
Python-Protokollierung und Dump an JSON
Wenn Sie dasselbe wie zuvor verwenden, können Sie dies visualisieren, indem Sie Japan, China und Südkorea ausschließen, in denen viele Menschen infiziert sind. In diesem Fall lauten die Daten für "2020/02/21" wie folgt. Besonders auffällig sind Südostasien, Europa und Nordamerika. Ich hoffe es konvergiert so schnell wie möglich. .. .. Migrieren Sie Python, Pandas, Python3, Zeitreihendaten und eigene CMS-Daten nach WordPress
Scraping mit lxml und Speichern in MySQL
[Kaggle] Vom Lesen der Daten bis zur Vorverarbeitung und Codierung
Migrieren Sie Qiita-Aktien und LGTM zu "Hatena Bookmark".
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
Abrufen von Daten von MacNote3 und Migrieren zu Write
Stellen Sie eine Verbindung zu MySQL her
Schreiben Sie ein Skript, um einen MySQL-Dump in TSV zu konvertieren
Datenbereinigung Umgang mit fehlenden und Ausreißern
Versuchen Sie, Twitter-Daten in SPAM und HAM zu unterteilen
MySQL-Installation unter Aws Linux 2 und Vorbereitung der Testdaten
Geben Sie einen Binärspeicherauszug in Binärdatei und zurück in eine Binärdatei aus
Einfach zu bedienendes SQLite3
Verbinden Sie Python mit MySQL
[Einführung in cx_Oracle] (Teil 6) Zuordnung von DB- und Python-Datentypen
[Einführung in Data Scientists] Deskriptive Statistik und einfache Regressionsanalyse ♬
Hinzufügen neuer Daten (gerade Linien und Diagramme) mit matplotlib
Erstellen Sie eine Python-Umgebung und übertragen Sie Daten auf den Server
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und Klassen
[Einführung in Python] Kombinieren Sie Nikkei-Durchschnitts- und NY Dow-CSV-Daten
Holen Sie sich zusätzliche Daten zu LDAP mit Python (Writer und Reader)