2012-04-02 23 views
2

2つのsqlite.dbファイルがあります。私は別のDBファイルのテーブルの1つの列の内容をコピーしたいと思います。例えばDjango:あるデータベースから別のデータベースにデータをコピーする

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

とold.dbと呼ばれる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) 

私はnew.dbと呼ばれるDBファイル内のモデルの情報を持っています

info_id列とinfo_name列のすべてのデータをold.dbからinfo_idに、info_nameをnew.dbにコピーしたいと思います。

私はのようなものを考えていた:

manage.py dbshell 

が、その後

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

これは動作していないようです。それは新しいと言われています。情報テーブルは存在しません。

答えて

5

設定ファイルのデータベースURLをdb2に変更し、syncdbを実行して新しいテーブルを作成する必要があります。その後、imoを実行する最も簡単な方法は、db1に戻って./manage.py dumpdata myapp > data.jsonを実行し、次にdb2に別のスイッチを実行して./manage.py loaddata data.jsonを実行することです。

その後、必要のないデータをdb2からドロップできます。

編集:もう1つの方法は、sqliteのATTACH関数を使用することです。まず、私はあなたが上記の最初のステップを行う(変更データベースの設定をしてテーブルを作成するsyncdbの実行を使用)をお勧めします、あなたはスイッチバックしてこれを行うことができます。

./manage.py dbshell 

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

を試してみましたが...私がいることを試してみると、あなたに戻って取得してみましょう! :) – JohnnyCash

+0

ValueError:いいえ、JSONオブジェクトは....アイデアをデコードできませんでしたか? – JohnnyCash

+0

ダンピングについて?モデルにデータがありますか?おそらく、最初のコメントの後に追加した2番目の方法を試してみてください。 –

1
  • old.dbからダンプされたファイルはinfo_typeが含まれています新しい情報モデルにはないフィールドです。これは、JSONファイルからロードされたすべてのフィールドをチェックするloaddataに失敗します。古いモデルからダンプする前にinfo_type行をコメントアウトすることができます。アレックスが言及した
  • 取り付け方法は、小さな微調整

    INSERT INTO newdb.Information SELECT * FROM Information;

    ノートSELECT周りに不足している括弧を必要とする、より簡単に、素晴らしいですが、SQLiteはそれを受け入れません。参考文献http://sqlite.org/lang_insert.html

  • あなたが移行を実行している場合、あなたはSouth
  • 興味深い
+0

parensのチップをありがとう。私はsqliteのウェブサイト上のINSERT文法を見てクエリを書いたが、括弧の欠如に気付かなかった。 –

関連する問題