从 Python/SQLAlchemy 使用 SQLite 的备份 API

发布于 2024-07-25 18:47:22 字数 496 浏览 4 评论 0原文

我正在使用 python 中的 SQLite 数据库(使用 SQLAlchemy)。 出于性能原因,我想在应用程序中填充内存数据库,然后将该数据库备份到磁盘。

SQLite 有一个 备份 API,这似乎可以透明地完成此操作。

APSW 文档表示包装备份 API,但我想从 Python 的标准 sqlite3 模块访问此功能,或者在最好的情况下从 SQLAlchemy 访问此功能。 这可能吗?

I'm using an SQLite database from python (with SQLAlchemy). For performance reasons, I'd like to populate an in-memory database in the application, and then back up that database to disk.

SQLite has a backup API, which seems would do this transparently.

The APSW documentation says that it wraps the backup API, but I'd like to access this functionality from Python's standard sqlite3 module, or in the best case from SQLAlchemy. Is this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

栀梦 2024-08-01 18:47:22

APSW 方言也可以很容易地添加到 SQLAlchemy 中。 在 0.6 中这很容易实现,它允许多种 DBAPI 适配器使用正在使用的数据库的通用方言。

the APSW dialect can be added to SQLAlchemy pretty easily as well. It would be very easy to achieve in 0.6, which allows multiple kinds of DBAPI adapters to make use of a common dialect for the database in use.

魔法唧唧 2024-08-01 18:47:22

如果 pysqlite 和 apsw 连接到同一个 sqlite 库,则 pysqlite 可以接受 apsw 连接。 请参阅:

http://docs.pysqlite.googlecode。 com/hg/sqlite3.html#combining-apsw-and-pysqlite

我将尝试研究这种(和其他)方法来让 apsw 与 SQLAlchemy 一起使用,因为它们是一个非常有用的组合。

If pysqlite and apsw are linked against the same sqlite library then pysqlite can accept apsw connections. See:

http://docs.pysqlite.googlecode.com/hg/sqlite3.html#combining-apsw-and-pysqlite

I will try to do work on this (and other) approaches to getting apsw to work with SQLAlchemy as they are a very useful combination.

记忆里有你的影子 2024-08-01 18:47:22

到了2021年,内存和磁盘之间的性能差异已经发生了变化。 我的游戏笔记本可以执行 SQL 操作,主要是 INSERT,在内存中比在磁盘中快 100 倍。 我正在使用原始连接进行备份(将内存数据库复制到磁盘)。

# create in-memory database. get raw_connection.
engine_memory = sqlalchemy.create_engine('sqlite://')
raw_connection_memory = engine_memory.raw_connection()

# do something to in-memory db
raw_cursor_memory.executescript(my_sql_script)

# save memory db to disk file.
engine_file = sqlalchemy.create_engine('sqlite:///myfile.sqlite')
raw_connection_file = engine_file.raw_connection()
raw_connection_memory.backup(raw_connection_file.connection)
raw_connection_file.close()
engine_file.dispose()

It's 2021, performance difference between memory and disk has changed. My gaming notebook can perform SQL operations, mostly INSERTs, 100x faster in memory than disk. I'm using raw connections to backup (copy in memory db to disk).

# create in-memory database. get raw_connection.
engine_memory = sqlalchemy.create_engine('sqlite://')
raw_connection_memory = engine_memory.raw_connection()

# do something to in-memory db
raw_cursor_memory.executescript(my_sql_script)

# save memory db to disk file.
engine_file = sqlalchemy.create_engine('sqlite:///myfile.sqlite')
raw_connection_file = engine_file.raw_connection()
raw_connection_memory.backup(raw_connection_file.connection)
raw_connection_file.close()
engine_file.dispose()
与往事干杯 2024-08-01 18:47:22

python-sqlite3-backup 模块声称可以解决这个问题。

The python-sqlite3-backup module claims to solve this problem.

等风来 2024-08-01 18:47:22

当我执行以下操作时,

import sqlite3
dir(sqlite3)

我看不到任何 备份 API 方法。

因此,答案是否定的; 您无法从 sqlite3 模块访问 API。 似乎没有人实施它。

When I do the following

import sqlite3
dir(sqlite3)

I see none of the backup API methods.

Therefore, the answer is no; you cannot access the API from the sqlite3 module. It appears that no one implemented it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文