quantmacro-india / src /database /queries.py
kingbros919's picture
Upload folder using huggingface_hub
292b308 verified
Raw
History Blame Contribute Delete
2.1 kB
from src.database.connection import get_connection
import pandas as pd
def get_latest_prices(conn=None):
close_conn = False
if conn is None:
conn = get_connection()
close_conn = True
df = pd.read_sql("SELECT * FROM bse_sector_prices ORDER BY date ASC", conn)
if close_conn:
conn.close()
return df
def get_latest_news_for_sector(sector, limit=20, conn=None):
close_conn = False
if conn is None:
conn = get_connection()
close_conn = True
query = """
SELECT r.published_at, r.headline, m.mapping_reason, r.sentiment, r.sentiment_score
FROM raw_news r
INNER JOIN news_sector_mapping m ON r.id = m.news_id
WHERE m.sector_index = ?
ORDER BY r.published_at DESC
LIMIT ?
"""
df = pd.read_sql(query, conn, params=(sector, limit))
if close_conn:
conn.close()
return df
def get_top_impact_articles(limit=3, conn=None):
close_conn = False
if conn is None:
conn = get_connection()
close_conn = True
query = """
SELECT r.headline, r.sentiment, r.sentiment_score, m.sector_index
FROM raw_news r
INNER JOIN news_sector_mapping m ON r.id = m.news_id
WHERE r.sentiment_score IS NOT NULL
ORDER BY ABS(r.sentiment_score) DESC
LIMIT ?
"""
df = pd.read_sql(query, conn, params=(limit,))
if close_conn:
conn.close()
return df
def get_market_pulse(conn=None):
close_conn = False
if conn is None:
conn = get_connection()
close_conn = True
query = """
SELECT m.sector_index, AVG(CASE
WHEN r.sentiment = 'positive' THEN r.sentiment_score
WHEN r.sentiment = 'negative' THEN -r.sentiment_score
ELSE 0 END) as avg_sentiment
FROM raw_news r
INNER JOIN news_sector_mapping m ON r.id = m.news_id
WHERE r.sentiment_score IS NOT NULL
GROUP BY m.sector_index
"""
df = pd.read_sql(query, conn)
if close_conn:
conn.close()
return dict(zip(df['sector_index'], df['avg_sentiment']))