4

データを SQL ステートメントにダンプしようとしています。django-admin.py ダンプデータは、json、xml、yaml のみを提供します。それで:

  1. 誰かがそれを行う良い方法を知っていますか?!

  2. 私はそれを試しました:

    デフsqldumper(モデル):

    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
    

そのため、モデルの値を自分で調べて、自分で INSERT ステートメントを作成します。次に、「django-admin.py sql」を使用して「CREATE」ステートメントを取得することを考えました..しかし、コード内から(コマンドラインからではなく)この行を使用する方法がわかりません。os.popen と os.system を試しましたが、うまくいきません。

はっきり言えば、コード内から「manage.py sql」をどのように使用しますか?

ビューに次のようなものを追加します。

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

事は-それは動作します..しかし、それはステートメントをstdoutに書き込みます...それは何かですが、完璧ではありません。django.core.management.sql.sql_create を直接使用してみます。

ありがとう

4

1 に答える 1

3

SQL 固有のダンプ プログラム ( MySQL のmysqldumpなど) を使用することをお勧めします。

Python に埋め込まれた sqlite の場合、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)
于 2011-05-04T09:25:25.367 に答える