SQLITE3Python附加数据库副本表.schem

2024-06-16 11:16:40 发布

您现在位置:Python中文网/ 问答频道 /正文

系统

  • Python 2.7
  • SQLite3

代码

我想通过从_贝克数据库被使用的数据库。在

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")

问题

为了执行最后一条语句,我首先要用汉字创建一个表-故事数据库和汉字故事一样的结构_贝克数据库(请参阅“TODO”。如何使用相同的结构创建表?我知道SQLite3中有一个.schema命令,但如何有效地使用该命令来创建新表?在


Tags: path数据库executedbdataoscurrentconn
3条回答

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

要获得原始表定义,您已经运行了.schema内部使用的相同查询:

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

我的sqlite3版本3.18.0有{}

受@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()

相关问题 更多 >