sqlite3 python附加数据库副本表.schema 系统 Python 2.7 SQLite3 密码

sqlite3 python附加数据库副本表.schema 系统 Python 2.7 SQLite3 密码,python,database,sqlite,Python,Database,Sqlite,我想通过将表从_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

我想通过将表从_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命令,但如何有效地使用该命令创建新表?

SQLite没有执行间接命令的机制

要获取原始表定义,请运行与.schema内部使用的查询相同的查询:

从db2.sqlite\u master中选择sql,其中type='table'和name='current'
受@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()
我的sqlite3版本3.18.0将创建表main.current作为来自db2.current的select*