使用 Pony ORM 更改已创建的 sqlite 数据库的正确方法
Proper way to make changes to already created sqlite database with Pony ORM
我可能问的很明显,但我找不到答案。
我正在学习 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 table 中的名称属性唯一。所以我修改了代码
name = Required(str, unique=True)
在 运行 代码再次填充数据库后,但名称字段未设置为唯一。数据重复。根据 DB 浏览器名称字段是 'unique'。我预计会出现错误。这样的错误将帮助我保持实体和数据库同步。
仅在 Person table class 中添加新属性,而不是在数据库中添加新属性将导致错误。
是否可以只在代码中的一个地方进行更改,这也会反映在数据库中?
如果我必须在两个地方进行相同的更改,如何做到既美观又干净?
我刚在 Pony ORM 'Telegram' 群上问过,这是那里发生的交易。
我可能问的很明显,但我找不到答案。 我正在学习 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 table 中的名称属性唯一。所以我修改了代码
name = Required(str, unique=True)
在 运行 代码再次填充数据库后,但名称字段未设置为唯一。数据重复。根据 DB 浏览器名称字段是 'unique'。我预计会出现错误。这样的错误将帮助我保持实体和数据库同步。
仅在 Person table class 中添加新属性,而不是在数据库中添加新属性将导致错误。
是否可以只在代码中的一个地方进行更改,这也会反映在数据库中?
如果我必须在两个地方进行相同的更改,如何做到既美观又干净?
我刚在 Pony ORM 'Telegram' 群上问过,这是那里发生的交易。