如何使用 SQLAlchemy 高效地将大型属性读取为 pandas DataFrame?

问题描述 投票:0回答:1

我正在开发一个项目,其中有一个大型数据集存储在关系数据库中,特别是包含历史股票价格的“PriceHistory”表。我还有一个包含不同交易品种的“Stocks”表和一个“Tag”表,我不关心使用 SQLAlchemy 的正常加载,但价格历史记录非常重,如果我直接使用 pandas 可能最好因为我需要它作为数据框。

这是我的库存模型:

class StockModel(BaseModel):
    __tablename__ = "stocks"
    __table_args__ = (Index("idx_stocks_id", "id"),)

    id = Column(Integer, primary_key=True)
    symbol = Column(String(50))

    price_history = # Don't know what to do
    tags = relationship(
        "TagModel", secondary="stock_tag_mapping", back_populates="stocks", cascade="all, delete, delete-orphan"
    )

价格历史表中的列是:

  • id:整数,主键
  • stock_id:整数,股票表的外键
  • 日期:日期时间
  • 打开:浮动
  • 关闭:浮动
  • 低:浮动
  • 高:浮动
  • 体积:浮动

我需要以 pandas DataFrame 的形式有效读取所有股票的价格历史属性。我更喜欢使用 SQLAlchemy 来执行此操作,但我愿意接受其他建议。

我的 Stock 域实体如下所示:

class Stock:
    symbol: Symbol
    tags: List[Tag]
    price_history: pd.DataFrame

此外,我希望支持在给定日期有效检索特定股票的价格,而无需在我的存储库中加载整个 DataFrame。例如,我希望能够调用类似的函数

get_price_by_date(symbol, date).

附加信息:

  • 价格历史表非常大,有数十万行。
  • 我需要读取所有股票的价格历史属性,而不仅仅是一个子集。
  • 我需要价格历史属性作为 pandas DataFrame,以便我可以对其执行各种计算。

考虑到“PriceHistory”表的大小和我的要求,有效实现这一目标的最佳方法是什么?

python pandas dataframe sqlalchemy bigdata
1个回答
0
投票

Pandas 已经支持直接通过 sqlalchemy 引擎导入表

from sqlalchemy import create_engine  
engine = create_engine("sqlite:///database.db")  
with engine.connect() as conn, conn.begin():  
    data = pd.read_sql_table("data", conn)  

更多信息请参考:

© www.soinside.com 2019 - 2024. All rights reserved.