【问题标题】:Update existing table/model column/fields?更新现有表/模型列/字段?
【发布时间】:2017-06-24 03:23:33
【问题描述】:

如何更新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)

【问题讨论】:

    标签: python postgresql peewee


    【解决方案1】:

    来自文档: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'),
    )
    

    还有很多其他的操作是可能的。

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

    【讨论】:

    • "更改了某些现有字段/列的类型。" - 是问题之一[我现在也有问题],但我看不到任何允许现有字段的东西。在最初的示例中,@sazr 正在更改的是“is_relative”。
    猜你喜欢
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多