Download data/database.py from feliponi/stock: direct link, hf CLI and curl.
- Browser
- Download file 1.88 kB
-
https://huggingface.co/spaces/feliponi/stock/resolve/main/data/database.py
- Command line
-
hf download hf://spaces/feliponi/stock/data/database.py
-
curl -L -o database.py https://huggingface.co/spaces/feliponi/stock/resolve/main/data/database.py
1.88 kB
| # data/database.py | |
| from sqlalchemy import create_engine, Column, Integer, String, JSON | |
| from sqlalchemy.ext.declarative import declarative_base | |
| from sqlalchemy.orm import sessionmaker | |
| from datetime import datetime | |
| Base = declarative_base() | |
| class CompanyData(Base): | |
| __tablename__ = 'company_data' | |
| id = Column(Integer, primary_key=True) | |
| ticker = Column(String) | |
| data_type = Column(String) | |
| data = Column(JSON) | |
| date = Column(String) | |
| class DatabaseManager: | |
| def __init__(self, db_url='sqlite:///financial_data.db'): | |
| self.engine = create_engine(db_url) | |
| self.Session = sessionmaker(bind=self.engine) | |
| Base.metadata.create_all(self.engine) | |
| def save_data(self, ticker, data_type, data): | |
| session = self.Session() | |
| try: | |
| new_entry = CompanyData( | |
| ticker=ticker, | |
| data_type=data_type, | |
| data=data, | |
| date=datetime.now().strftime('%Y-%m-%d %H:%M:%S') | |
| ) | |
| session.add(new_entry) | |
| session.commit() | |
| except Exception as e: | |
| print(f"Error saving data: {e}") | |
| finally: | |
| session.close() | |
| def get_historical_data(self, ticker): | |
| session = self.Session() | |
| try: | |
| financials = session.query(CompanyData).filter( | |
| CompanyData.ticker == ticker, | |
| CompanyData.data_type == 'financials' | |
| ).order_by(CompanyData.date.desc()).first() | |
| news = session.query(CompanyData).filter( | |
| CompanyData.ticker == ticker, | |
| CompanyData.data_type == 'news' | |
| ).order_by(CompanyData.date.desc()).all() | |
| return { | |
| 'financials': financials.data if financials else None, | |
| 'news': [n.data for n in news] | |
| } | |
| finally: | |
| session.close() |