2011-11-11 37 views

回答

3

无需为此使用Django。 MySQL包含的命令来为你做它:

mysqldump -u USERNAME -pPASSWORD DATABASE_NAME > DATABASE_FILE.sql 
+0

这可行,但我需要生成自定义转储。从Django视图中使用子进程模块直接提供此命令是否有任何疑问? – davidscolgan

+0

不是真的,需要进行适当的锁定,以确保两个请求不会尝试同时写入同一个文件。另外看看[mysqldump的选项](http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html) - 你可能想用'--single-transaction'选项。 –

0

如果要导出表结构是不变的(很可能是),那么这将是很容易写一个模板来生成它作为一个文本输出。您可以使用Django模板(它们不是HTML特定的),也可以只使用字符串插值。

是这样的:

def dump(w, qs): 
    for r in qs: 
     w.write ("insert into tablename (fieldA, fieldB, fieldC) values ('%s', '%s', %d);\n" % (
      quote(r.fieldA), quote(r.fieldB), int(r.fieldC))) 

假设fieldAfieldB是字符串,fieldC是一个整数,quote()是MySQL安全,避开功能。 w参数是类文件对象(可以是Django HttpResponse对象),qs是具有所需数据的查询集。