使用Pony ORM对已创建的sqlite数据库进行更改的正确方法

时间:2016-12-28 11:10:41

标签: python sqlite orm ponyorm

我可能会问一个显而易见的事情,但我找不到答案。 我正在学习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属性唯一。所以我改变了代码 name = Required(str, unique=True) 再次运行代码后,数据库已填充,但名称字段未设置为唯一。数据重复。根据DB浏览器名称字段是'独特'。我预计会出错。这样的错误将帮助我保持实体和数据库的同步。

仅在Person表类中添加新属性,但不在数据库中添加新属性将导致错误。

是否可以仅在代码内的一个位置进行更改,这也会反映在数据库中?

如果我必须在两个地方做同样的改变,怎么做得好又干净?

1 个答案:

答案 0 :(得分:0)

我刚刚问过Pony ORM' Telegram' group,这是那里发生的交易。