4

我正在尝试将我的数据转储到 SQL 语句中。django-admin.py 转储数据仅提供 json、xml、yaml。所以:

  1. 有人知道这样做的好方法吗?!

  2. 我试过了:

    def 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

问题是 - 它可以工作..但它会将语句写入标准输出......这是一些东西,但并不完美。我会尝试直接使用 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 回答