Django-admin.py DumpData to SQL
-
28-10-2019 - |
Question
J'essaie de vider mes données sur les instructions SQL. Le Django-admin.py DumpData ne fournit que JSON, XML, YAML. alors:
Quelqu'un sait-il une bonne façon de le faire ?!
J'ai essayé ça:
DEF SQLDUMPER (modèle):
result = "" units = model.objects.all().values() for unit in units: statement = "INSERT INTO myapp.model "+str(tuple(unit.keys())).replace("'", "")+" VALUES " + str(tuple(unit.values()))+"\r\n" result+=statement return result
Je passe donc les valeurs du modèle moi-même et je fais moi-même l'insertion. Ensuite, j'ai pensé utiliser "django-admin.py sql" pour obtenir l'instruction "Créer" .. mais ensuite je ne sais pas comment utiliser cette ligne à partir de mon code (et non via la ligne de commande). J'ai essayé OS.popen et OS.System, mais cela ne fonctionne pas vraiment .. des conseils à ce sujet?
Je vais le dire clairement: comment utilisez-vous le "manage.py sql" de l'intérieur de votre code?
J'ajoute quelque chose comme ça à mon avis:
import os, sys
import imp
from django.core.management import execute_manager
sys_argv_backup = sys.argv
imp.find_module("settings")
import settings
sys.argv = ['','sql','myapp']
execute_manager(settings)
sys.argv = sys_argv_backup
Le truc, c'est - ça marche .. mais il écrit les déclarations au stdout ... c'est quelque chose, mais pas parfait. Je vais essayer d'utiliser django.core.management.sql.sql_create directement, nous verrons comment ça se passe.
Merci
La solution
Je suggère d'utiliser un programme de vidage spécifique à SQL (par exemple mysqltump pour mysql).
Pour Sqlite intégré à Python, vous pouvez regarder cet exemple n'impliquant pas django:
# Convert file existing_db.db to SQL dump file dump.sql
import sqlite3, os
con = sqlite3.connect('existing_db.db')
with open('dump.sql', 'w') as f:
for line in con.iterdump():
f.write('%s\n' % line)