[PYTHON] Vider les données SQLite3 et migrer vers MySQL

introduction

J'avais affaire à Django en tant que produit personnel, et je travaillais avec SQLite3 avec la valeur par défaut, mais comme d'habitude, j'ai pensé que je devais passer à MySQL, et lorsque j'utilisais la commande suivante, une erreur se produisait souvent. Je ne pourrais pas m'en occuper sans le savoir, donc c'est comme un mémo

$ python manage.py dumpdata --indent 4 > dump.json
#Changer la direction de la base de données
$ python manage.py loaddata dump.json

environnement

Vider les données de SQLite3

$ sqlite3 db.sqlite3 .dump > dump.sql

Ou

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

Vous devriez maintenant avoir un fichier comme dump.sql dans le répertoire spécifié.

Convertir les données SQL pour SQLite3 afin qu'elles puissent être utilisées dans MySQL

En l'état, il ne peut pas être utilisé dans MySQL, il doit donc être converti.

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

Redmine en a préparé une belle! Merci! !! J'ai pensé, mais le script lui-même n'est compatible qu'avec Python2.

Cependant, il semble que print ne supporte pas Python3, je l'ai donc réécrit un peu.

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()

J'ai changé seulement la grammaire de print. Pas de problème si vous connaissez la différence entre Python 2 et 3

Convertir

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

Si vous le faites ressembler à ceci, vous devriez avoir un gars appelé mysql.sql.

Mettre dans MySQL

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

finalement

En guise de mise en garde, les caractères spéciaux (pictogrammes, etc.) ne semblent pas bien fonctionner après la conversion, donc si vous n'avez pas à gérer de telles choses, pourquoi ne pas l'essayer?

Recommended Posts

Vider les données SQLite3 et migrer vers MySQL
Compressez les données python et écrivez sur sqlite
[AWS] Migrer les données de DynamoDB vers Aurora MySQL
Journalisation Python et vidage vers json
Migrez vos propres données CMS vers WordPress
Scraping à l'aide de lxml et enregistrement sur MySQL
[Kaggle] De la lecture des données au prétraitement et au codage
Migrez le stock Qiita et LGTM vers «Hatena Bookmark»
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Récupération des données de MacNote3 et migration vers Write
Connectez-vous à mysql
Ecrire un script pour convertir un vidage MySQL en TSV
Nettoyage des données Comment gérer les valeurs manquantes et aberrantes
Essayez de diviser les données Twitter en SPAM et HAM
Installation de MySQL sur Aws Linux 2 et préparation des données de test
Sortie d'un vidage binaire en binaire et retour dans un fichier binaire
Facile à utiliser SQLite3
Connectez python à mysql
[Introduction à cx_Oracle] (Partie 6) Mappage des types de données DB et Python
[Introduction aux Data Scientists] Statistiques descriptives et analyse de régression simple ♬
Comment ajouter de nouvelles données (lignes droites et tracés) à l'aide de matplotlib
Créer un environnement Python et transférer des données vers le serveur
[Introduction to Data Scientists] Bases de Python ♬ Fonctions et classes
[Introduction à Python] Combinaison des données Nikkei Average et NY Dow CSV
Obtenez des données supplémentaires vers LDAP avec python (Writer et Reader)