2011-11-11 52 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是具有所需數據的查詢集。