如何在PeeWee?
中更新表格列和列数据类型我已经从我的模型中创建了数据库中的表Person
。但我现在已经为模型添加了一些新字段,并更改了某些现有字段/列的类型。
以下内容不会更新表格结构:
psql_db = PostgresqlExtDatabase(
'MyDB',
user='foo',
password='bar',
host='',
port='5432',
register_hstore=False
)
class PsqlModel(Model):
"""A base model that will use our Postgresql database"""
class Meta:
database = psql_db
class Person(PsqlModel):
name = CharField()
birthday = DateField() # New field
is_relative = BooleanField() # Field type changed from varchar to bool
def __str__(self):
return '%s, %s, %s' % (self.name, self.birthday, self.is_relative)
psql_db.connect()
# is there a function to update/change the models table columns??
psql_db.create_tables([Person], True) # Hoping an update of the table columns occurs
# Error because no column birthday and incorrect type for is_relative
grandma_glen = Person.create(name='Glen', birthday=date(1966,1,12), is_relative=True)
答案 0 :(得分:2)
来自文档:http://docs.peewee-orm.com/en/latest/peewee/example.html?highlight=alter
创建表后添加字段将需要您 要么删除表并重新创建它,要么手动添加列 使用ALTER TABLE查询。
或者,您可以使用架构迁移扩展来更改 使用Python的数据库模式。
来自http://docs.peewee-orm.com/en/latest/peewee/playhouse.html#migrate:
# Postgres example:
my_db = PostgresqlDatabase(...)
migrator = PostgresqlMigrator(my_db)
title_field = CharField(default='')
status_field = IntegerField(null=True)
migrate(
migrator.add_column('some_table', 'title', title_field),
migrator.rename_column('some_table', 'pub_date', 'publish_date'),
migrator.add_column('some_table', 'status', status_field),
migrator.drop_column('some_table', 'old_column'),
)
还有很多其他操作可能。
因此,首先您需要更改表架构,然后,您可以更新模型以反映这些更改。