django-admin.py volcado de datos a declaraciones SQL
-
28-10-2019 - |
Pregunta
Estoy intentando volcar mis datos en declaraciones SQL. django-admin.py dumpdata proporciona solo json, xml, yaml. entonces:
-
¿Alguien conoce una buena manera de hacerlo?
-
Lo intenté:
def sqldumper (modelo):
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
así que voy a repasar los valores del modelo yo mismo y hago la declaración INSERT. luego pensé en usar "django-admin.py sql" para obtener la declaración "CREATE" ... pero luego no sé cómo usar esta línea desde dentro de mi código (y no a través de la línea de comandos). Probé os.popen y os.system, pero realmente no funciona. ¿Algún consejo sobre eso?
Lo diré claramente: ¿Cómo se usa "manage.py sql" desde el interior de su código?
Agrego algo como esto a mi vista:
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
la cosa es - funciona ... pero escribe las declaraciones en el stdout ... es algo, pero no perfecto.Intentaré usar django.core.management.sql.sql_create directamente, veremos cómo va ..
gracias
Solución
Sugiero utilizar un programa de volcado específico de SQL (por ejemplo, mysqldump para MySQL).
Para sqlite incrustado en Python, puede ver este ejemplo sin involucrar a 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)