django-admin.py dumpdata到SQL语句

时间:2011-05-04 09:18:13

标签: sql django django-admin dumpdata

我正在尝试将数据转储到SQL语句中。 django-admin.py dumpdata只提供json,xml,yaml。 这样:

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

  2. 我试过了:

    def sqldumper(model):

    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
    
  3. 所以我自己查看模型值,并自己制作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,我们会看到它是怎么回事..

    感谢

1 个答案:

答案 0 :(得分:3)

我建议使用特定于SQL的转储程序(例如,mysqldump用于MySQL)。

对于Python中嵌入的sqlite,您可以查看this example不涉及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)