【问题标题】:django-admin.py dumpdata to SQL statementsdjango-admin.py 转储数据到 SQL 语句
【发布时间】:2011-05-04 09:18:13
【问题描述】:

我正在尝试将我的数据转储到 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 ,我们会看看它是怎么回事..

谢谢

【问题讨论】:

    标签: sql django django-admin dumpdata


    【解决方案1】:

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

    【讨论】:

    • 我想过,但假设我使用的是从 django 获得的普通 sqlite3。我知道在 MySQL 上这很容易,但你如何在 sqlite 上做到这一点?
    • 我在上面的问题中添加了一些“步骤”,它并不完美,但它让我更接近目标.. 感谢 Don
    猜你喜欢
    • 2019-05-18
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2020-08-14
    • 2011-02-10
    • 2016-03-29
    相关资源
    最近更新 更多