如何用另一个 table 的内容替换整个 table 的内容

How can I replace the whole table's content with another table's content

我需要用另一个 table 的内容替换一个 table 的全部内容。两个 table 具有相同的字段。

我看不出有什么方法可以通过 Peewee 执行 ALTER TABLE 语句,所以我决定结合使用 DROP TABLECREATE TABLE 和 [=17] =] 这样的语句:

TableInWhichIWantToReplaceAllData.drop_table()
db.create_table(TableInWhichIWantToReplaceAllData)
TableWithNewData.insert_from(
    # ???,
    # ???
).execute()

但问题是如何指定 所有 字段进行 SELECTed 和 INSERTed?我不想像示例中那样手动指定所有这些:

source = (User
          .select(User.username, fn.COUNT(Tweet.id))
          .join(Tweet, JOIN.LEFT_OUTER)
          .group_by(User.username))
UserTweetDenorm.insert_from(
    [UserTweetDenorm.username, UserTweetDenorm.num_tweets],
    source).execute()

还有其他方法吗?

Peewee 通过 migrations extension. Specifically it sounds like you want to rename a table 支持 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)

我认为这应该可以解决问题,但老实说...只需使用迁移器即可。