小编典典

django-admin.py dumpdata到SQL语句

sql

我正在尝试将数据转储到SQL语句。django-admin.py dumpdata仅提供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,我们将看看它如何进行。

谢谢


阅读 188

收藏
2021-04-28

共1个答案

小编典典

我建议使用特定于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)
2021-04-28