Python 和 sqlite3 - 导入和导出数据库

Posted

技术标签:

【中文标题】Python 和 sqlite3 - 导入和导出数据库【英文标题】:Python and sqlite3 - importing and exporting databases 【发布时间】:2011-06-10 18:55:19 【问题描述】:

我正在尝试编写脚本来导入数据库文件。我编写了这样的脚本来导出文件:

import sqlite3

con = sqlite3.connect('../sqlite.db')
with open('../dump.sql', 'w') as f:
    for line in con.iterdump():
        f.write('%s\n' % line)

现在我希望能够导入该数据库。我试过了:

import sqlite3

con = sqlite3.connect('../sqlite.db')
f = open('../dump.sql','r')
str = f.read()
con.execute(str)

但我不能执行多个语句。有没有办法让它直接运行 SQL 脚本?

【问题讨论】:

【参考方案1】:
sql = f.read() # watch out for built-in `str`
cur.executescript(sql)

Documentation.

【讨论】:

@adam - 如果您从文档中复制光标,我认为您的意思是先创建一个光标(“cur.”) sqlite3 模块允许两种用法;任你选。 @adam - 我知道这一点。但是问题代码中没有定义“cur”,对吧? 有没有更有效的方法来执行大量插入?我有很多,这样太慢了 这里有一些提示:sqlite.org/cvstrac/wiki?p=PerformanceTuning 转储应该已经为您包装在事务中(以避免在插入之间打开和关闭数据库)。【参考方案2】:

尝试使用

con.executescript(str)

文档

Connection.executescript(sql_script)
    This is a nonstandard shortcut that creates an intermediate cursor object
    by calling the cursor method, then calls the cursor’s executescript
    method with the parameters given.

或者先创建光标

import sqlite3

con = sqlite3.connect('../sqlite.db')
f = open('../dump.sql','r')
str = f.read()
cur = con.cursor()
cur.execute(str)

【讨论】:

以上是关于Python 和 sqlite3 - 导入和导出数据库的主要内容,如果未能解决你的问题,请参考以下文章

django数据迁移

使用 Python 将 CSV 文件导入 sqlite3 数据库表

excel里面的数据如何导入SQLite3

无法使用 Anaconda Python 导入 sqlite3

sqlite3操作备注

sqlite3操作备注