31 lines
1.2 KiB
Python
31 lines
1.2 KiB
Python
from datetime import date, datetime
|
|
|
|
from sqlalchemy import BigInteger, Date, DateTime, Float, ForeignKey, Index, UniqueConstraint
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from app.database import Base
|
|
|
|
|
|
class OHLCVRecord(Base):
|
|
__tablename__ = "ohlcv_records"
|
|
__table_args__ = (
|
|
UniqueConstraint("ticker_id", "date", name="uq_ohlcv_ticker_date"),
|
|
Index("ix_ohlcv_ticker_date", "ticker_id", "date"),
|
|
)
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
ticker_id: Mapped[int] = mapped_column(
|
|
ForeignKey("tickers.id", ondelete="CASCADE"), nullable=False
|
|
)
|
|
date: Mapped[date] = mapped_column(Date, nullable=False)
|
|
open: Mapped[float] = mapped_column(Float, nullable=False)
|
|
high: Mapped[float] = mapped_column(Float, nullable=False)
|
|
low: Mapped[float] = mapped_column(Float, nullable=False)
|
|
close: Mapped[float] = mapped_column(Float, nullable=False)
|
|
volume: Mapped[int] = mapped_column(BigInteger, nullable=False)
|
|
created_at: Mapped[datetime] = mapped_column(
|
|
DateTime(timezone=True), default=datetime.utcnow, nullable=False
|
|
)
|
|
|
|
ticker = relationship("Ticker", back_populates="ohlcv_records")
|