【发布时间】:2021-11-29 22:58:40
【问题描述】:
我有代码:
from io import BytesIO as Memory
import requests
def download_file_to_obj(url, file_obj):
with requests.get(url, stream=True) as r:
r.raise_for_status()
for chunk in r.iter_content(chunk_size=None):
if chunk:
file_obj.write(chunk)
def main(source_url):
db_in_mem = Memory()
print('Downloading..')
download_file_to_obj(source_url, db_in_mem)
print('Complete!')
with sqlite3.connect(database=db_in_mem.read()) as con:
cursor = con.cursor()
cursor.execute('SELECT * FROM my_table limit 10;')
data = cursor.fetchall()
print(data)
del(db_in_mem)
my_table 已在源数据库中退出。 错误:
sqlite3.OperationalError:没有这样的表:my_table
如何将 sqlite 数据库从 http 加载到内存中?
【问题讨论】:
-
问题是sqlite3希望它的数据库是一个真正的文件,或者内存数据库中的特殊
:memory:。甚至备份 API 也只知道如何在它们之间进行复制,但是 AFAIK,没有一个能够使用像对象这样的 Python 文件,也不能使用内存映像。如果你想那样做,你将不得不找到一个内存文件系统。你可以看看pyfakefs。由您决定是否值得,或者使用真实文件是否更简单...... -
谢谢。我认为不值得“建造花园”,使用真正的临时文件更容易。正如python的ZEN所说:简单胜于复杂。
-
@snakecharmerb 看起来像,但根本不是,因为没有办法执行 SQL 查询。做一个转储。
标签: python python-3.x sqlite