更新现有的表/模型列/字段?

时间:2017-06-24 03:23:33

标签: python postgresql peewee

如何在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)

1 个答案:

答案 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'),
)

还有很多其他操作可能。

因此,首先您需要更改表架构,然后,您可以更新模型以反映这些更改。