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
$ 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é.
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
$ cat dump.sql | python sqlite3-to-mysql.py > mysql.sql
Si vous le faites ressembler à ceci, vous devriez avoir un gars appelé mysql.sql
.
$ mysql -u USERNAME -p
mysql> CREATE DATABASE hoge CHARACTER SET utf8mb4;
mysql> USE hoge;
mysql> source /path/to/mysql.sql;
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