pandas 如何从AWS S3中存储的db文件创建sqlite连接?Python

a14dhokn  于 2023-02-17  发布在  SQLite
关注(0)|答案(1)|浏览(167)

在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中的文件作为绝对路径而不是对象。
我期待着你的意见,他们会帮助我很多

31moq8wy

31moq8wy1#

有几种不同的方法可以解决这个问题。

方法#1

第一种方法是将sqlite数据库下载到本地文件系统,然后用sqlite打开它,here是一个如何从S3下载文件的示例,您可以使用它将文件下载到当前工作目录,然后使用

import sqlite3
con = sqlite3.connect("file.db")

打开文件。
但是,您对此文件所做的任何更改都不会反映在S3上的副本中。

方法#2

第二种方法是使用Litestream。Litestream是一个通过将WAL写入S3来将更改复制回S3的工具。WAL是文件中更改内容的记录,您可以仅使用WAL和SQLite数据库的旧副本来恢复数据库的当前状态。偶尔,它会通过写入SQLite数据库的新副本来压缩WAL。则删除旧数据库和WAL。
他们有一个tutorial来解释如何使用它。

局限性

如果您希望在S3中有一个SQLite数据库,并且有多个客户端可以读写该数据库,该怎么办?
这是不可能的。你需要一个支持多用户并发的数据库,比如PostgreSQL或者MySQL,来完成这个任务。SQLite和S3不能完成这个任务。

相关问题