Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,如何将sqlite表从磁盘数据库复制到内存数据库?_Python_Database_Sqlite_Copy - Fatal编程技术网

在python中,如何将sqlite表从磁盘数据库复制到内存数据库?

在python中,如何将sqlite表从磁盘数据库复制到内存数据库?,python,database,sqlite,copy,Python,Database,Sqlite,Copy,如何在python中将基于磁盘的sqlite表复制到内存数据库?我知道该表的模式。此代码更一般,但它可能会帮助您: import sqlite3 new_db = sqlite3.connect(':memory:') # create a memory database old_db = sqlite3.connect('test.db') query = "".join(line for line in old_db.iterdump()) # Dump old database i

如何在python中将基于磁盘的sqlite表复制到内存数据库?我知道该表的模式。

此代码更一般,但它可能会帮助您:

import sqlite3

new_db = sqlite3.connect(':memory:') # create a memory database

old_db = sqlite3.connect('test.db')

query = "".join(line for line in old_db.iterdump())

# Dump old database in the new one. 
new_db.executescript(query)
编辑:要获取指定的表,只需在for循环中进行如下更改:

name_table = "test_table"  # name of the table that you want to get.

for line in old_db.iterdump():
    if name_table in line:
        query = line
        break

看看这本书。这个例子是用C编写的,但这应该向您展示它是如何高效完成的。

对于那些使用python和sqlalchemy的人来说,另一个选择是:


背后的想法是将元数据从源数据库复制到目标数据库,然后一列接一列地传输。

这看起来是可行的,但效率有多高?@Clay:就像我在回答中写的,这段代码更通用,你可以使用它转储所有数据库或只转储给定的表,它的效率如何?代码只使用了一次迭代器(更少的内存),它还可以在一个查询中创建所有的数据库,这意味着不需要启动(更少的通信)。谢谢!这对我很有帮助。我很喜欢它的柔韧性,是二次的吗?我认为最好执行query=''.join([line for line in old_db.iterdump()])@mouad,在C中,这可能是二次的,因为您每一步都在构建长度为N的字符串。(实际上,平均长度是N/2,但仍然是O(N))。但Python可能会对此进行优化。不幸的是,我不知道任何C语言。我确实认为我在某处听说过apsw(另一个Python Sqlite包装器)有一个备份功能。这是真的吗?有用:)我只需要这样的东西!伟大的thx
sqlite3\u备份*
C函数无法通过Python sqlite3 API使用。虽然为Python创建一个调用它们的C扩展应该很容易,因为这篇文章在搜索引擎中仍然非常可见,而且(当前)答案不在这里或重复链接中,但我在这里添加了相关的SO答案:。简短回答:备份API在Python 3.7+中可用: