Правильный способ внесения изменений в уже созданную базу данных sqlite с помощью Pony ORM

1

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

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, но не в базу данных, вызовет ошибку.

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

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

Теги:
orm
ponyorm

1 ответ

0
Лучший ответ

Я только что спросил о группе POM ORM Telegram, и это была транзакция, которая произошла там.

Изображение 138364

  • 1
    Я вижу, что когда db.generate_mapping выполняется на уже созданной базе данных, он выполняет некоторые проверки, если поля и таблицы существуют. 'ВЫБЕРИТЕ "Person". "Id", "Person". "Name", "Person". "Age", "Person". "Comment" ИЗ "Person" "Person" WHERE 0 = 1' Я должен пойти с чем-то похоже, что бы сравнить свойства атрибута.
  • 0
    Похоже, что миграции в Pony близки, и они появятся с версией 0.8, см. Выпуск GitHub.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню