from database.tnews.model import TNews def create_news(db, news: TNews): db.add(news) db.commit() db.refresh(news) return news # 插入数据库之前判断数据库中是否已经存在,根据news.url 判断 def create_news_if_url_not_exists(db, news: TNews): # 检查是否已经存在具有相同 URL 的记录 existing_news = db.query(TNews).filter(TNews.url == news.url).first() if existing_news: # 如果记录已存在,直接返回已有的记录 return existing_news # 如果记录不存在,插入新的记录 db.add(news) db.commit() db.refresh(news) return news def create_news_list_if_url_not_exists(db, news_list: list[TNews]): inserted_news = [] # 用于保存实际插入的新闻记录 for news in news_list: # 检查是否已经存在具有相同 URL 的记录 existing_news = db.query(TNews).filter(TNews.url == news.url).first() if not existing_news: # 如果记录不存在,插入新的记录 db.add(news) inserted_news.append(news) # 批量提交所有插入的记录 db.commit() # 刷新所有新插入的记录 for news in inserted_news: db.refresh(news) return inserted_news def get_news_by_id(db, news_id: int): return db.query(TNews).filter(TNews.id == news_id).first() def get_news_need_content(db): return db.query(TNews).filter(TNews.content == None).all() def get_news_need_summary(db): return db.query(TNews).filter(TNews.ai_summary == None).all() def get_news_for_generate_reference_message(db, news_type: str) -> list[TNews]: return db.query(TNews).filter( TNews.type == news_type, TNews.ai_summary != None, TNews.is_usage == False ).order_by(TNews.occurrence_date.desc()).all() def update_news_by_id(db, news: TNews): db.merge(news) db.commit() def update_news(db, news_id: int, updates: dict): news = db.query(TNews).filter(TNews.id == news_id).first() if news: for key, value in updates.items(): setattr(news, key, value) db.commit() db.refresh(news) return news def delete_news(db, news_id: int): news = db.query(TNews).filter(TNews.id == news_id).first() if news: db.delete(news) db.commit() return news