django-admin.py dumpdata para instruções SQL
-
28-10-2019 - |
Pergunta
Estou tentando despejar meus dados em instruções SQL. o django-admin.py dumpdata fornece apenas json, xml, yaml. então:
-
alguém conhece uma boa maneira de fazer isso ?!
-
Eu tentei isso:
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
portanto, vou revisar os valores do modelo sozinho e fazer a instrução INSERT sozinho. então pensei em usar "django-admin.py sql" para obter a instrução "CREATE" .. mas não sei como usar esta linha de dentro do meu código (e não através da linha de comando). Tentei os.popen e os.system, mas realmente não funcionam .. alguma dica sobre isso?
Vou ser bem claro: como você usa o "manage.py sql" de dentro do seu código?
Eu adiciono algo assim à minha visão:
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
o que acontece é que funciona .. mas grava as instruções no stdout ... é algo, mas não perfeito.Vou tentar usar django.core.management.sql.sql_create diretamente, veremos como funciona ..
obrigado
Solução
Eu sugiro usar um programa de despejo específico de SQL (por exemplo, mysqldump para MySQL).
Para sqlite incorporado em Python, você pode olhar este exemplo não envolvendo 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)