【问题标题】:How can I replace the whole table's content with another table's content如何用另一个表的内容替换整个表的内容
【发布时间】:2016-02-18 16:59:30
【问题描述】:

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

我没有看到任何通过Peewee 执行ALTER TABLE 语句的方法,所以我决定使用DROP TABLECREATE TABLEINSERT ... FROM 语句的组合,如下所示:

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

但问题是如何将 all 字段指定为 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()

还有其他方法吗?

【问题讨论】:

    标签: python mysql python-2.7 orm peewee


    【解决方案1】:

    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)
    

    我相信这应该可以解决问题,但老实说……只需使用迁移器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      相关资源
      最近更新 更多