sql_model.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from sqlite3 import connect
  2. from mylib.settings import OUTPUT_DIR, WORK_DIR
  3. from datetime import datetime
  4. from sqlmodel import Field, SQLModel, create_engine, Session, select
  5. sqlite_file_name = OUTPUT_DIR / "database.db"
  6. sqlite_url = f"sqlite:///{sqlite_file_name}"
  7. engine = create_engine(sqlite_url, echo=True)
  8. class SearchResult(SQLModel, table=True):
  9. id: int = Field(default=None, primary_key=True)
  10. keyword: str = Field()
  11. start: int = Field()
  12. url: str = Field()
  13. html_path: str = Field()
  14. created_at: datetime = Field(default_factory=datetime.now)
  15. def create_db_and_tables():
  16. SQLModel.metadata.create_all(engine)
  17. class DatabaseManager:
  18. def __init__(self):
  19. self.engine = engine
  20. def save_search_result(self, keyword: str, start: int, url: str, html_path: str) -> SearchResult:
  21. """保存搜索结果到数据库"""
  22. with Session(self.engine) as session:
  23. result = SearchResult(
  24. keyword=keyword,
  25. start=start,
  26. url=url,
  27. html_path=html_path
  28. )
  29. session.add(result)
  30. session.commit()
  31. return result
  32. def get_search_results(self, keyword: str):
  33. """获取指定关键词的所有搜索结果"""
  34. with Session(self.engine) as session:
  35. results = session.exec(
  36. select(SearchResult)
  37. .where(SearchResult.keyword == keyword)
  38. .order_by(SearchResult.start)
  39. ).all()
  40. return results
  41. def main():
  42. create_db_and_tables()
  43. if __name__ == "__main__":
  44. main()