gpt4 book ai didi

python - 从 sqlite3 远程数据库读取

转载 作者:太空宇宙 更新时间:2023-11-03 13:18:29 24 4
gpt4 key购买 nike

在我的服务器中,我试图从一堆 sqlite3 数据库(从网络客户端发送)中读取数据并处理它们的数据。数据库文件在 S3 存储桶中,我有它们的 URL,我可以在内存中打开它们。

现在的问题是 sqlite3.connect 只需要一个绝对路径字符串,我无法将内存中的文件传递给它。

conn=sqlite3.connect() #how to pass file in memory or url
c=conn.cursor()
c.execute('''select * from data;''')
res=c.fetchall()
# other processing with res

最佳答案

SQLite 要求 数据库文件存储在磁盘上(它使用各种锁和分页技术)。内存中的文件是不够的。

我会创建一个临时目录来保存数据库文件,将其写入该目录,然后连接到它。该目录也为 SQLite 提供了写入提交日志的空间。

要处理所有这些,上下文管理器可能会有所帮助:

import os.path
import shutil
import sqlite3
import sys
import tempfile

from contextlib import contextmanager


@contextmanager
def sqlite_database(inmemory_data):
path = tempfile.mkdtemp()
with open(os.path.join(path, 'sqlite.db'), 'wb') as dbfile:
dbfile.write(inmemory_data)
conn = None
try:
conn = sqlite3.connect(os.path.join(path, 'sqlite.db'))
yield conn
finally:
if conn is not None:
conn.close()
try:
shutil.rmtree(path)
except IOError:
sys.stderr.write('Failed to clean up temp dir {}'.format(path))

并将其用作:

with sqlite_database(yourdata) as connection:
# query the database

这会将内存中的数据写入磁盘,打开一个连接,让您使用该连接,然后在您之后进行清理。

关于python - 从 sqlite3 远程数据库读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21963020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com