【问题标题】:How to copy a sqlite table from a disk database to a memory database in python? [duplicate]python - 如何将sqlite表从磁盘数据库复制到python中的内存数据库? [复制]
【发布时间】:2010-10-25 21:35:26
【问题描述】:

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

【问题讨论】:

标签: python database sqlite copy


【解决方案1】:

这段代码更通用,但也许它可以帮助你:

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

【讨论】:

  • 这看起来可行,但效率如何?
  • @Clay:就像我在回答中写的那样,这段代码更加通用和通用,您可以使用它来转储所有数据库或仅转储给定的表,它的效率如何?该代码使用迭代器一次(更少的内存),它还在单个查询中创建所有数据库,这意味着没有启动(更少的通信)。
  • 谢谢!这对我很有帮助。我确实喜欢它的灵活性。
  • 是二次的吗?我认为最好做 query = ''.join([line for line in old_db.iterdump()])
  • @mouad,在 C 中这可能是二次的,因为您每一步都在构建一个长度为 N 的字符串。 (实际上,平均长度是 N/2,但这仍然是 O(N))。不过,Python 可能会对此进行优化。
【解决方案2】:

查看SQLite Backup API。该示例是用 C 语言编写的,但这应该会向您展示它是如何高效地完成的。

【讨论】:

  • 不幸的是,我不知道任何 C。我确实认为我在某处听说过 apsw(另一个 Python Sqlite 包装器)虽然有备份功能。这是真的吗?
  • 有用 :) 我只需要这样的东西!太好了
  • sqlite3_backup* C 函数不能通过 Python sqlite3 API 使用。虽然为调用它们的 Python 创建一个 C 扩展应该很容易
【解决方案3】:

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

http://www.tylerlesmann.com/2009/apr/27/copying-databases-across-platforms-sqlalchemy/

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多