2016-12-28 2 views
1

Я, вероятно, задаю очевидную вещь, но я не смог найти ответ. Я изучаю Pony ORM и начал с создания простой базы данных из документации. Я сделал дизайн простой схемы базы данных и код https://editor.ponyorm.com/user/nidza11/Ponz#Правильный способ внести изменения в уже созданную базу данных sqlite с Pony ORM

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) После запуска кода снова была заполнена база данных, но поле имени не установлено уникальным. Данные дублировались. В поле имени браузера БД было «уникальным». Я ожидал ошибки. Такая ошибка поможет мне синхронизировать сущность и базу данных.

Добавление нового атрибута только в класс таблицы Person, но не в базу данных, приведет к ошибке.

Возможно ли внести изменения только в одном месте внутри кода, которое будет отражено и в базе данных?

Если мне нужно сделать одно и то же изменение на двух местах, как это сделать красиво и чисто?

ответ

0

Я только что попросил группу «Telegram» Pony ORM, и это транзакция, которая произошла там.

+1

Я холодный видеть, что, когда db.generate_mapping выполняется на уже созданную базу данных, она выполняет некоторые проверки, если поля и таблицы существует. «ВЫБРАТЬ« Лицо ».« Id »,« Person ».« Name »,« Person ».« Age »,« Person ».« Комментарий » ОТ« Лицо »« Лицо » ГДЕ 0 = 1 ' I должен идти с чем-то похожим, что бы сравнить свойства атрибута. – nidza11

+0

Похоже, что миграция в Пони близка, и будет поставляться с версией 0.8, см. [GitHub issue] (https://github.com/ponyorm/pony/issues/16#issuecomment-342718594) – jpyams

Смежные вопросы