1

本番環境にpostgres本番データベースがあります(大量のデータが含まれています)。ここで、tg-app のモデルを変更して、いくつかの新しいテーブルをデータベースに追加する必要があります。

どうすればいいですか?私はsqlAlchemyを使用しています。

4

4 に答える 4

1

私は一般的にジョンに同意します。1 パスの SELECT および INSERT は、大規模なデータベースでは実用的ではなく、レプリケーションまたはマルチパスの差分 SELECT / INSERT の設定はおそらく難しく、エラーが発生しやすくなります。

個人的には、 SQLAlchemy をTurboGearsの下の ORM として使用しています。私が実行するスキーマの移行を行うには:

tg-admin sql status

ライブ スキーマと開発スキーマの違いを確認するには、DDL スクリプトを手動で記述 (およびバージョン管理) して、必要な変更を加えます。

SQLAlchemy スタンドアロンを使用している (つまり、TurboGears の下ではない) 場合、sql status機能は非常にシンプルで、TG ソースで見つけることができます: http://svn.turbogears.org/branches/1.1/turbogears/command/sacommand.py ( 1.0 ブランチの古い Python / SA リリースのバージョンも)。

于 2008-12-24T00:30:18.340 に答える
1

最も簡単な方法は、いくつかの SQL 更新スクリプトを作成し、それらを使用してデータベースを更新することです。明らかに、これはかなり低レベルの (いわば) アプローチです。

これを頻繁に行うと思われ、Python に固執したい場合は、sqlalchemy-migrateを参照してください。最近の Python Magazine にそれに関する記事がありました。

于 2008-11-19T12:10:43.607 に答える
1

これは常に機能し、ほとんど考える必要はなく、忍耐だけが必要です。

  1. バックアップを作成します。

  2. 実際にバックアップを作成します。誰もがバックアップがあると考えてステップ 1 をスキップしますが、それを見つけることも作業することもできません。回復できないバックアップは信用しないでください。

  3. 新しいデータベース スキーマを作成します。

  4. 新しいスキーマで、新しい構造を一から定義します。理想的には、新しいスキーマを構築する DDL スクリプトを実行します。スキーマを構築するためのスクリプトがありませんか? 1 つ作成し、バージョン管理下に置きます。

    SA を使用すると、テーブルを定義し、スキーマを構築できます。スキーマは Python でバージョン管理されているため、これは理想的です。

  5. データを移動します。

    を。構造が変更されていないテーブルの場合、単純な INSERT/SELECT ステートメントを使用して古いスキーマから新しいスキーマにデータを移動します。

    b. 構造が変更されたテーブルの場合は、データを古いものから新しいものに移動するための INSERT/SELECT スクリプトを開発します。多くの場合、これは新しいテーブルごとに 1 つの SQL ステートメントになります。場合によっては、2 つの接続が開いている Python ループにする必要があります。

    c. 新しいテーブルの場合、データをロードします。

  6. 古いスキーマの使用を停止します。新しいスキーマの使用を開始します。古いスキーマを使用していたすべてのプログラムを見つけて、構成を修正します。

    アプリケーションのリストがありませんか? 1 つを作成します。真剣に - それは重要です。

    アプリケーションにハードコーディングされた DB 構成がありますか? あなたがそれに取り組んでいる間に、それも修正してください。共通の構成ファイルを作成するか、共通の環境変数などを使用して、(a) 一貫性を保証し、(b) 「運用」の概念を一元化します。

この種の処置は、大手術を行うときはいつでも行うことができます。データを抽出する場合を除いて、古いデータベースに触れることはありません。

于 2008-11-19T12:10:50.923 に答える
0

テーブルを追加するだけで、既存のデータを含むテーブルを変更しない場合は、新しい sqlAlchemy テーブル定義を model.py に追加して、次を実行するだけです。

tg-admin sql create

これにより、既存のテーブルが上書きされることはありません。

スキーマの移行については、http://code.google.com/p/sqlalchemy-migrate/を参照してください。私自身はまだ使用していません。

移行作業の前に、必ず本番データベースのバックアップを取ってください。

于 2008-11-19T12:10:19.223 に答える