在S3存储桶中,我为SQLite存储了一个file.db
。
我想要的是使用该文件建立到数据库的连接。如下所示:
import boto3
import pandas
import sqlite3
s3 = boto3.resource('s3')
cnx = sqliite3.connect('s3://bucket/file.db')
df = pd.read_sql_table('select * from table', cnx)
有没有可能用python/pandas从s3中读取文件?我知道比较棘手的是把s3中的文件作为绝对路径而不是对象。
我期待着你的意见,他们会帮助我很多
1条答案
按热度按时间31moq8wy1#
有几种不同的方法可以解决这个问题。
方法#1
第一种方法是将sqlite数据库下载到本地文件系统,然后用sqlite打开它,here是一个如何从S3下载文件的示例,您可以使用它将文件下载到当前工作目录,然后使用
打开文件。
但是,您对此文件所做的任何更改都不会反映在S3上的副本中。
方法#2
第二种方法是使用Litestream。Litestream是一个通过将WAL写入S3来将更改复制回S3的工具。WAL是文件中更改内容的记录,您可以仅使用WAL和SQLite数据库的旧副本来恢复数据库的当前状态。偶尔,它会通过写入SQLite数据库的新副本来压缩WAL。则删除旧数据库和WAL。
他们有一个tutorial来解释如何使用它。
局限性
如果您希望在S3中有一个SQLite数据库,并且有多个客户端可以读写该数据库,该怎么办?
这是不可能的。你需要一个支持多用户并发的数据库,比如PostgreSQL或者MySQL,来完成这个任务。SQLite和S3不能完成这个任务。