You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.5 KiB
62 lines
2.5 KiB
|
2 months ago
|
"""
|
||
|
|
股票数据模型
|
||
|
|
"""
|
||
|
|
from datetime import datetime, date
|
||
|
|
from sqlalchemy import Column, Integer, String, BigInteger, Numeric, Boolean, Date, DateTime
|
||
|
|
from app.db.base import Base
|
||
|
|
|
||
|
|
|
||
|
|
class StockInfo(Base):
|
||
|
|
"""股票基础信息表"""
|
||
|
|
__tablename__ = "stock_info"
|
||
|
|
|
||
|
|
id = Column(Integer, primary_key=True, index=True)
|
||
|
|
code = Column(String(20), unique=True, nullable=False, index=True)
|
||
|
|
symbol = Column(String(100), nullable=False)
|
||
|
|
security_status = Column(Integer)
|
||
|
|
pre_close = Column(Numeric(12, 4))
|
||
|
|
high_limited = Column(Numeric(12, 4))
|
||
|
|
low_limited = Column(Numeric(12, 4))
|
||
|
|
price_tick = Column(Numeric(10, 4))
|
||
|
|
exchange = Column(String(10)) # SH, SZ, BJ
|
||
|
|
industry = Column(String(50))
|
||
|
|
list_date = Column(Date)
|
||
|
|
is_active = Column(Boolean, default=True)
|
||
|
|
created_at = Column(DateTime(timezone=True), default=datetime.utcnow)
|
||
|
|
updated_at = Column(DateTime(timezone=True), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||
|
|
|
||
|
|
|
||
|
|
class StockKlineDaily(Base):
|
||
|
|
"""股票日线数据表"""
|
||
|
|
__tablename__ = "stock_kline_daily"
|
||
|
|
|
||
|
|
id = Column(BigInteger, primary_key=True, index=True)
|
||
|
|
code = Column(String(20), nullable=False, index=True)
|
||
|
|
trade_date = Column(Date, nullable=False, index=True)
|
||
|
|
open = Column(Numeric(12, 4), nullable=False)
|
||
|
|
high = Column(Numeric(12, 4), nullable=False)
|
||
|
|
low = Column(Numeric(12, 4), nullable=False)
|
||
|
|
close = Column(Numeric(12, 4), nullable=False)
|
||
|
|
volume = Column(BigInteger, nullable=False)
|
||
|
|
amount = Column(Numeric(18, 4), nullable=False)
|
||
|
|
adj_factor = Column(Numeric(12, 6))
|
||
|
|
created_at = Column(DateTime(timezone=True), default=datetime.utcnow)
|
||
|
|
updated_at = Column(DateTime(timezone=True), default=datetime.utcnow, onupdate=datetime.utcnow)
|
||
|
|
|
||
|
|
|
||
|
|
class StockKlineMin(Base):
|
||
|
|
"""股票分钟数据表"""
|
||
|
|
__tablename__ = "stock_kline_min"
|
||
|
|
|
||
|
|
id = Column(BigInteger, primary_key=True, index=True)
|
||
|
|
code = Column(String(20), nullable=False, index=True)
|
||
|
|
period_type = Column(String(10), nullable=False) # min1, min5, min15, min30, min60
|
||
|
|
trade_datetime = Column(DateTime, nullable=False, index=True)
|
||
|
|
open = Column(Numeric(12, 4), nullable=False)
|
||
|
|
high = Column(Numeric(12, 4), nullable=False)
|
||
|
|
low = Column(Numeric(12, 4), nullable=False)
|
||
|
|
close = Column(Numeric(12, 4), nullable=False)
|
||
|
|
volume = Column(BigInteger, nullable=False)
|
||
|
|
amount = Column(Numeric(18, 4), nullable=False)
|
||
|
|
created_at = Column(DateTime(timezone=True), default=datetime.utcnow)
|