簡體   English   中英

sqlite3 python ATTACH DATABASE復制表.schema

[英]sqlite3 python ATTACH DATABASE copy table .schema

系統

  • Python 2.7
  • SQLite3

我想通過將表從_bak.db復制到正在使用的.db中來恢復數據庫的備份。

conn = sqlite3.connect(os.path.join("data", "db", "Kanji-story.db"))
c = conn.cursor()
c.execute("DROP TABLE IF EXISTS current")

c.execute("ATTACH DATABASE ? AS db2", (os.path.join('data', 'db', 'Kanji-story_bak.db'),))

# TODO Code for Creating table with the same structure
c.execute("INSERT INTO main.current SELECT * FROM db2.current")

要執行最后一條語句,我首先必須在Kanji-story.db中創建一個表,其結構與Kanji-story_bak.db相同(請參閱#TODO)。 如何創建具有相同結構 我知道SQLite3中有.schema命令,但是如何有效地使用該命令創建新表呢?

受到@CL答案的啟發。 ,完整代碼為:

conn = sqlite3.connect(os.path.join("data", "db", "Kanji-story.db"))
c = conn.cursor()
c.execute("DROP TABLE IF EXISTS current")

c.execute("ATTACH DATABASE ? AS db2", (os.path.join('data', 'db', 'Kanji-story_bak.db'),))

c.execute("SELECT sql FROM db2.sqlite_master WHERE type='table' AND name='current'")
c.execute(c.fetchone()[0]) # Contains: CREATE TABLE current (framenum INTEGER, nextKanji INTEGER)
c.execute("INSERT INTO main.current SELECT * FROM db2.current")

conn.commit()
conn.close()

SQLite沒有執行間接命令的機制。

要獲取原始表定義,您需要運行.schema內部使用的相同查詢:

SELECT sql FROM db2.sqlite_master WHERE type='table' AND name='current'

我的sqlite3版本3.18.0create table main.current as select * from db2.current

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM