Files
peter/database/tnews/crud.py
konjacpotato 8c1a740f0b import peter
2025-11-12 20:42:16 +08:00

88 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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