mysql_models.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. """
  2. MySQL数据模型定义
  3. 提供MySQL数据库表的结构化模型定义
  4. """
  5. from typing import Optional, Dict, Any, List
  6. from dataclasses import dataclass
  7. from datetime import datetime
  8. @dataclass
  9. class UserModel:
  10. """用户模型"""
  11. id: Optional[int] = None
  12. name: str = ""
  13. email: str = ""
  14. age: int = 0
  15. created_at: Optional[datetime] = None
  16. updated_at: Optional[datetime] = None
  17. def to_dict(self) -> Dict[str, Any]:
  18. """转换为字典"""
  19. return {
  20. 'id': self.id,
  21. 'name': self.name,
  22. 'email': self.email,
  23. 'age': self.age,
  24. 'created_at': self.created_at.isoformat() if self.created_at else None,
  25. 'updated_at': self.updated_at.isoformat() if self.updated_at else None
  26. }
  27. @classmethod
  28. def from_dict(cls, data: Dict[str, Any]) -> 'UserModel':
  29. """从字典创建实例"""
  30. return cls(
  31. id=data.get('id'),
  32. name=data.get('name', ''),
  33. email=data.get('email', ''),
  34. age=data.get('age', 0),
  35. created_at=datetime.fromisoformat(data['created_at']) if data.get('created_at') else None,
  36. updated_at=datetime.fromisoformat(data['updated_at']) if data.get('updated_at') else None
  37. )
  38. @dataclass
  39. class TestTableModel:
  40. """测试表模型"""
  41. id: Optional[int] = None
  42. name: str = ""
  43. description: Optional[str] = None
  44. status: str = "active"
  45. created_at: Optional[datetime] = None
  46. def to_dict(self) -> Dict[str, Any]:
  47. """转换为字典"""
  48. return {
  49. 'id': self.id,
  50. 'name': self.name,
  51. 'description': self.description,
  52. 'status': self.status,
  53. 'created_at': self.created_at.isoformat() if self.created_at else None
  54. }
  55. @classmethod
  56. def from_dict(cls, data: Dict[str, Any]) -> 'TestTableModel':
  57. """从字典创建实例"""
  58. return cls(
  59. id=data.get('id'),
  60. name=data.get('name', ''),
  61. description=data.get('description'),
  62. status=data.get('status', 'active'),
  63. created_at=datetime.fromisoformat(data['created_at']) if data.get('created_at') else None
  64. )
  65. @dataclass
  66. class BasisOfPreparationModel:
  67. """编制依据模型"""
  68. id: Optional[int] = None
  69. title: str = ""
  70. content: Optional[str] = None
  71. category: Optional[str] = None
  72. status: str = "current"
  73. created_at: Optional[datetime] = None
  74. updated_at: Optional[datetime] = None
  75. def to_dict(self) -> Dict[str, Any]:
  76. """转换为字典"""
  77. return {
  78. 'id': self.id,
  79. 'title': self.title,
  80. 'content': self.content,
  81. 'category': self.category,
  82. 'status': self.status,
  83. 'created_at': self.created_at.isoformat() if self.created_at else None,
  84. 'updated_at': self.updated_at.isoformat() if self.updated_at else None
  85. }
  86. @classmethod
  87. def from_dict(cls, data: Dict[str, Any]) -> 'BasisOfPreparationModel':
  88. """从字典创建实例"""
  89. return cls(
  90. id=data.get('id'),
  91. title=data.get('title', ''),
  92. content=data.get('content'),
  93. category=data.get('category'),
  94. status=data.get('status', 'current'),
  95. created_at=datetime.fromisoformat(data['created_at']) if data.get('created_at') else None,
  96. updated_at=datetime.fromisoformat(data['updated_at']) if data.get('updated_at') else None
  97. )
  98. __all__ = [
  99. "UserModel",
  100. "TestTableModel",
  101. "BasisOfPreparationModel"
  102. ]