【问题标题】:How to create a sqlite connection from a db file stored in AWS S3? Python如何从存储在 AWS S3 中的数据库文件创建 sqlite 连接? Python
【发布时间】:2023-02-17 04:15:33
【问题描述】:

在 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 中的文件作为绝对路径而不是对象。

我期待着你的 cmets,他们会帮助我很多

【问题讨论】:

    标签: python pandas sqlite amazon-s3


    【解决方案1】:

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

    方法#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 无法做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-29
      • 2011-03-21
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 2017-12-25
      • 2017-09-29
      相关资源
      最近更新 更多