我正在开发一个项目,其中有一个大型数据集存储在关系数据库中,特别是包含历史股票价格的“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"
)
价格历史表中的列是:
我需要以 pandas DataFrame 的形式有效读取所有股票的价格历史属性。我更喜欢使用 SQLAlchemy 来执行此操作,但我愿意接受其他建议。
我的 Stock 域实体如下所示:
class Stock:
symbol: Symbol
tags: List[Tag]
price_history: pd.DataFrame
此外,我希望支持在给定日期有效检索特定股票的价格,而无需在我的存储库中加载整个 DataFrame。例如,我希望能够调用类似的函数
get_price_by_date(symbol, date).
附加信息:
考虑到“PriceHistory”表的大小和我的要求,有效实现这一目标的最佳方法是什么?
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)
更多信息请参考: