2012-04-02 203 views
2

我有兩個sqlite.db文件。我想將一個列的內容複製到另一個db文件的表中。Django:將數據從一個數據庫複製到另一個數據庫

例如:

我叫new.db的在數據庫文件中的模型信息:

class Information(models.Model): 
     info_id = models.AutoField(primary_key = True) 
     info_name = models.CharField(max_length = 50) 

和數據庫文件中的下列信息模型稱爲old.db:

class Information(models.Model): 
      info_id = models.AutoField(primary_key = True) 
      info_type = models.CharField(max_length = 50) 
      info_name = models.CharField(max_length = 50) 

我想將old_db中的info_id和info_name列中的所有數據複製到new.db中的info_id和info_name中。

我的想法是這樣的:

manage.py dbshell 

然後

INSERT INTO "new.Information" ("info_id", "info_name") 
SELECT "info_id", "info_name" 
FROM "old.Information"; 

這似乎並不奏效。它說new.Information表不存在...任何想法?

回答

5

您需要將設置文件中的數據庫URL切換到db2並運行syncdb以創建新表。之後,執行imo最簡單的方法是切換回db1並運行./manage.py dumpdata myapp > data.json,然後再切換到db2,您可以在其中運行./manage.py loaddata data.json

之後,您可以從db2中刪除不需要的數據。

編輯:另一種方法是使用sqlite的ATTACH函數。首先,我建議你做上面的第一步(更改數據庫設置和使用執行syncdb創建表),那麼你就可以切換回做這樣的:

./manage.py dbshell 

> ATTACH DATABASE 'new.db' AS newdb; 
> INSERT INTO newdb.Information SELECT * FROM Information; 
+0

有趣..讓我給一個嘗試,並送還給你! :) – JohnnyCash 2012-04-02 21:40:42

+0

ValueError:沒有JSON對象可以解碼....想法? – JohnnyCash 2012-04-02 21:43:03

+0

關於傾銷?你有模型中的數據嗎?也許嘗試使用第二種方法,我在第一個評論後添加了這種方法。 – 2012-04-02 21:50:29

1
  • 從old.db轉儲的文件包含資訊類型字段不在新的信息模型中。這將會失敗loaddata,它檢查從JSON文件加載的所有字段。您可以在從舊模型轉儲之前註釋掉info_type行。
  • 亞歷克斯提到的連接方式更容易和偉大的,這需要一個微小的調整

    INSERT INTO newdb.Information SELECT * FROM Information;

    注意到周圍的SELECT缺少括號,SQLite不接受他們。參考文獻http://sqlite.org/lang_insert.html

  • 如果要執行遷移,你有沒有試過South
+0

謝謝你的parens提示。我通過查看sqlite網站上的INSERT語法來編寫查詢,但未注意到(缺少)parens。 – 2012-04-03 11:43:10

相關問題