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
$ 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.
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
$ cat dump.sql | python sqlite3-to-mysql.py > mysql.sql
Wenn Sie es so aussehen lassen, sollten Sie einen Typen namens "mysql.sql" haben.
$ mysql -u USERNAME -p
mysql> CREATE DATABASE hoge CHARACTER SET utf8mb4;
mysql> USE hoge;
mysql> source /path/to/mysql.sql;
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