Frage

Ich versuche, meine Daten in SQL-Anweisungen zu speichern. Die Dump-Daten django-admin.py enthalten nur json, xml, yaml. also:

  1. kennt jemand einen guten Weg, um das zu tun?!

  2. Ich habe das versucht:

    def sqldumper (Modell):

    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
    

    Also gehe ich die Modellwerte selbst durch und mache die INSERT-Anweisung selbst. dann dachte ich daran, "django-admin.py sql" zu verwenden, um die "CREATE" -Anweisung zu erhalten. Aber dann weiß ich nicht, wie ich diese Zeile aus meinem Code heraus verwenden soll (und nicht über die Befehlszeile). Ich habe os.popen und os.system ausprobiert, aber es funktioniert nicht wirklich. irgendwelche Tipps dazu?

    Ich werde es klar sagen: Wie verwenden Sie die Datei "manage.py sql" in Ihrem Code?

    Ich füge meiner Ansicht so etwas hinzu:

    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
    

    die Sache ist - es funktioniert .. aber es schreibt die Anweisungen in die stdout ... Es ist etwas, aber nicht perfekt.Ich werde versuchen, django.core.management.sql.sql_create direkt zu verwenden. Wir werden sehen, wie es geht.

    danke

War es hilfreich?

Lösung

Ich schlage vor, ein SQL-spezifisches Dump-Programm zu verwenden (z. B. mysqldump für MySQL).

Für in Python eingebettetes SQLite können Sie in diesem Beispiel ohne 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)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top