python – 将同一表模式的多个备份合并到一个主表中

前端之家收集整理的这篇文章主要介绍了python – 将同一表模式的多个备份合并到一个主表中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有大约200个sqlite数据库副本.所有在不同的时间采用不同的数据.删除了一些行,并添加了一些行.它们都在一个目录中.

我想使用目录中的所有.db文件合并表my_table中的所有行.我希望删除重复的行,只显示所有数据库的所有内容.

我想在纯sql中这样做,但我不认为这是可能的,所以我们也可以使用Python.

表定义:

CREATE TABLE my_table (
    ROWID INTEGER PRIMARY KEY AUTOINCREMENT,guid TEXT UNIQUE NOT NULL,text TEXT,replace INTEGER DEFAULT 0,service_center TEXT,handle_id INTEGER DEFAULT 0,subject TEXT,country TEXT,attributedBody BLOB,version INTEGER DEFAULT 0,type INTEGER DEFAULT 0,service TEXT,account TEXT,account_guid TEXT,error INTEGER DEFAULT 0,date INTEGER,date_read INTEGER,date_delivered INTEGER,is_delivered INTEGER DEFAULT 0,is_finished INTEGER DEFAULT 0,is_emote INTEGER DEFAULT 0,is_from_me INTEGER DEFAULT 0,is_empty INTEGER DEFAULT 0,is_delayed INTEGER DEFAULT 0,is_auto_reply INTEGER DEFAULT 0,is_prepared INTEGER DEFAULT 0,is_read INTEGER DEFAULT 0,is_system_message INTEGER DEFAULT 0,is_sent INTEGER DEFAULT 0,has_dd_results INTEGER DEFAULT 0,is_service_message INTEGER DEFAULT 0,is_forward INTEGER DEFAULT 0,was_downgraded INTEGER DEFAULT 0,is_archive INTEGER DEFAULT 0,cache_has_attachments INTEGER DEFAULT 0,cache_roomnames TEXT,was_data_detected INTEGER DEFAULT 0,was_deduplicated INTEGER DEFAULT 0,is_audio_message INTEGER DEFAULT 0,is_played INTEGER DEFAULT 0,date_played INTEGER,item_type INTEGER DEFAULT 0,other_handle INTEGER DEFAULT -1,group_title TEXT,group_action_type INTEGER DEFAULT 0,share_status INTEGER,share_direction INTEGER,is_expirable INTEGER DEFAULT 0,expire_state INTEGER DEFAULT 0,message_action_type INTEGER DEFAULT 0,message_source INTEGER DEFAULT 0
)

解决方法

要能够同时访问主数据库和快照,请使用 ATTACH.
删除行的旧版本,请使用 INSERT OR REPLACE
ATTACH 'snapshot123.db' AS snapshot;
INSERT OR REPLACE INTO main.my_table SELECT * FROM snapshot.my_table;
DETACH snapshot;

按照从最旧到最新的顺序对所有数据库执行此操作.
(sqlite没有这种循环控制机制;在Python中执行此循环.)

或者,您可以从最新和最旧的方向向后移动,并仅插入尚不存在的行:

ATTACH 'snapshot123.db' AS snapshot;
INSERT OR IGNORE INTO main.my_table SELECT * FROM snapshot.my_table;
DETACH snapshot;

猜你在找的Python相关文章