我需要将一个表的全部内容替换为另一个表的内容。两个表都有相同的字段。
我没有看到通过Peewee执行ALTER TABLE
声明的任何方式,所以我决定使用DROP TABLE
,CREATE TABLE
和{{1}的组合像这样的语句:
INSERT ... FROM
但问题是如何指定所有字段为TableInWhichIWantToReplaceAllData.drop_table()
db.create_table(TableInWhichIWantToReplaceAllData)
TableWithNewData.insert_from(
# ???,
# ???
).execute()
和SELECT
?我不想像示例中那样手动指定所有这些:
INSERT
还有其他办法吗?
答案 0 :(得分:2)
Peewee通过migrations extension支持表格更改。具体来说,听起来你想要rename a table。
或者,您可以使用INSERT INTO ... SELECT FROM。要获取模型上的所有字段,您可以使用ModelClass._meta.sorted_fields
(2.7.0及更高版本)或ModelClass._meta.get_fields()
(2.6.4及更早版本)。
select = TableWithData.select()
insert = NewTable.insert_from(NewTable._meta.get_fields(), select)
我相信这应该可以做到,但老实说......只需使用迁移器。