Question

J'essaie de vider mes données sur les instructions SQL. Le Django-admin.py DumpData ne fournit que JSON, XML, YAML. alors:

  1. Quelqu'un sait-il une bonne façon de le faire ?!

  2. 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

Était-ce utile?

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top