<p>从python3.7开始,这个功能在<a href="https://docs.python.org/3/library/sqlite3.html#sqlite3.Connection.backup" rel="nofollow noreferrer">standard library</a>中可用。以下是一些直接从官方文件中复制的例子:</p>
<blockquote>
<p>Example 1, copy an existing database into another:</p>
</blockquote>
<pre class="lang-py prettyprint-override"><code>import sqlite3
def progress(status, remaining, total):
print(f'Copied {total-remaining} of {total} pages...')
con = sqlite3.connect('existing_db.db')
bck = sqlite3.connect('backup.db')
with bck:
con.backup(bck, pages=1, progress=progress)
bck.close()
con.close()
</code></pre>
<blockquote>
<p>Example 2, copy an existing database into a transient copy:</p>
</blockquote>
^{pr2}$
<p>要回答将内存中的数据库备份到磁盘的具体问题,这看起来是可行的。下面是一个使用标准库<code>backup</code>方法的快速脚本:</p>
<pre class="lang-py prettyprint-override"><code>import sqlite3
source = sqlite3.connect(':memory:')
dest = sqlite3.connect('backup.db')
c = source.cursor()
c.execute("CREATE TABLE test(id INTEGER PRIMARY KEY, msg TEXT);")
c.execute("INSERT INTO test VALUES (?, ?);", (1, "Hello World!"))
source.commit()
source.backup(dest)
dest.close()
source.close()
</code></pre>
<p>并且<code>backup.db</code>数据库可以加载到<code>sqlite3</code>中并进行检查:</p>
<pre><code>$ sqlite3 backup.db
SQLite version 3.24.0 2018-06-04 14:10:15
Enter ".help" for usage hints.
sqlite> .schema
CREATE TABLE test(id INTEGER PRIMARY KEY, msg TEXT);
sqlite> SELECT * FROM test;
1|Hello World!
</code></pre>