django-admin.py dumpdata alle istruzioni SQL
-
28-10-2019 - |
Domanda
Sto cercando di eseguire il dump dei miei dati su istruzioni SQL. django-admin.py dumpdata fornisce solo json, xml, yaml. quindi:
-
qualcuno conosce un buon modo per farlo ?!
-
Ci ho provato:
def sqldumper (modello):
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
quindi esaminerò personalmente i valori del modello e formulerò personalmente l'istruzione INSERT. poi ho pensato di usare "django-admin.py sql" per ottenere l'istruzione "CREATE" .. ma poi non so come usare questa riga dall'interno del mio codice (e non tramite la riga di comando). Ho provato os.popen e os.system, ma non funziona davvero .. qualche consiglio in merito?
Lo metterò chiaramente: come si usa "manage.py sql" dall'interno del codice?
Aggiungo qualcosa del genere alla mia opinione:
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
il fatto è che - funziona .. ma scrive le istruzioni nello stdout ... è qualcosa, ma non perfetto.Proverò a usare direttamente django.core.management.sql.sql_create, vedremo come va ..
grazie
Soluzione
Suggerisco di utilizzare il programma di dump specifico di SQL (ad esempio mysqldump per MySQL).
Per sqlite incorporato in Python, puoi guardare questo esempio non coinvolgere 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)