2016-12-28 9 views
1

おそらく明らかなことを尋ねていますが、答えが見つかりませんでした。 私はPony ORMを学習しており、ドキュメントから簡単なデータベースを作成することから始めました。私は、コードを実行した後、簡単なデータベースダイアグラムのデザインとコードhttps://editor.ponyorm.com/user/nidza11/Ponz#Pony ORMで既に作成されたsqliteデータベースを変更する適切な方法

from pony.orm import * 

db = Database() 

class Person(db.Entity): 
    id = PrimaryKey(int, auto=True) 
    name = Required(str) 
    age = Required(int) 
    cars = Set('Car', cascade_delete=True) 

class Car(db.Entity): 
    id = PrimaryKey(int, auto=True) 
    make = Required(str) 
    model = Required(str) 
    person = Required(Person) 

db.bind("sqlite", "TestDB.sqlite", create_db = True) 
db.generate_mapping(create_tables=True) 

with db_session: 
    p1 = Person(name="John", age=24) 
    p2 = Person(name="Ive", age=26) 
    p3 = Person(name="Olivia", age = 26) 
    c1 = Car(make="Toyota", model = "Prius", person = p2) 
    p3 = Car(make="Ford", model = "Explorer", person = p3) 

をした、データベースが作成および移入されました。 私はPersonテーブル内で一意の名前属性を作りたいと思います。だから私はコードを変更しました name = Required(str, unique=True) コードをもう一度実行した後に、データベースには値が設定されましたが、名前フィールドは一意に設定されていません。データは複製されました。 DBブラウザの名前フィールドによると、 'ユニーク'でした。私は間違いを予想した。このようなエラーは、エンティティとデータベースの同期を維持するのに役立ちます。

新しい属性をPersonテーブルクラスにのみ追加しますが、データベースには追加しないと、エラーが発生します。

コード内の1か所だけ変更することは可能ですか?データベースにも反映されますか?

私は2つの場所で同じ変更を加えなければならない場合、それをどのように素敵で清潔にするのですか?

答えて

0

私はPony ORM '電報'グループについて尋ねましたが、これはそこで発生した取引です。

+1

私は、フィールドとテーブルが存在する場合、それはいくつかのチェックを実行している、db.generate_mapping時にはすでに作成されたデータベース上で実行されていることがわかりコールド。 '選択 "人" "人" "人" "人" "人" "年齢" "人" "コメント" "Person" "Person"から WHERE 0 = 1' I似たようなもの、つまり属性のプロパティを比較する必要があります。 – nidza11

+0

Ponyでの移行は近いと思われ、バージョン0.8が付属します。[GitHubの問題](https://github.com/ponyorm/pony/issues/16#issuecomment-342718594)を参照してください。 – jpyams

関連する問題