如何用另一个 table 的内容替换整个 table 的内容
How can I replace the whole table's content with another table's content
我需要用另一个 table 的内容替换一个 table 的全部内容。两个 table 具有相同的字段。
我看不出有什么方法可以通过 Peewee 执行 ALTER TABLE
语句,所以我决定结合使用 DROP TABLE
、CREATE TABLE
和 [=17] =] 这样的语句:
TableInWhichIWantToReplaceAllData.drop_table()
db.create_table(TableInWhichIWantToReplaceAllData)
TableWithNewData.insert_from(
# ???,
# ???
).execute()
但问题是如何指定 所有 字段进行 SELECT
ed 和 INSERT
ed?我不想像示例中那样手动指定所有这些:
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)
我认为这应该可以解决问题,但老实说...只需使用迁移器即可。
我需要用另一个 table 的内容替换一个 table 的全部内容。两个 table 具有相同的字段。
我看不出有什么方法可以通过 Peewee 执行 ALTER TABLE
语句,所以我决定结合使用 DROP TABLE
、CREATE TABLE
和 [=17] =] 这样的语句:
TableInWhichIWantToReplaceAllData.drop_table()
db.create_table(TableInWhichIWantToReplaceAllData)
TableWithNewData.insert_from(
# ???,
# ???
).execute()
但问题是如何指定 所有 字段进行 SELECT
ed 和 INSERT
ed?我不想像示例中那样手动指定所有这些:
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)
我认为这应该可以解决问题,但老实说...只需使用迁移器即可。