models.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. import datetime
  2. import pydantic
  3. from typing import List, Dict, Any, Optional
  4. import sqlalchemy
  5. import os
  6. import sys
  7. sys.path.append(os.path.dirname(os.path.dirname(__file__)))
  8. from database.config import chat_task_table,DB_URL,ai_yunying_db
  9. # from sqlmodel import Field, SQLModel,Relationship,Column,Session,select,func,UniqueConstraint
  10. from typing import Optional,Dict,Tuple
  11. from sqlalchemy.dialects.postgresql import ARRAY
  12. '''
  13. class UserInfo(SQLModel, table=True):
  14. id: Optional[int] = Field(default=None, primary_key=True)
  15. avatar: Optional[str] = Field(default=None)
  16. avatar_larger: Optional[str] = Field(default=None)
  17. client_key: Optional[str] = Field(default=None)
  18. e_account_role: Optional[str] = Field(default=None)
  19. nickname: Optional[str] = Field(default=None)
  20. # 外键约束有助于:级联操作、避免冗余、数据完整性
  21. open_id: Optional[str] = Field(index=True, unique=True)
  22. union_id: Optional[str] = Field(default=None)
  23. update_time: datetime.datetime = Field(default_factory=datetime.datetime.now) # 添加时间戳字段
  24. '''
  25. '''
  26. class UnReadUserData(SQLModel, table=True):
  27. id:Optional[int] = Field(default=None, primary_key=True)
  28. name: Optional[str] = Field(default=None)
  29. avator: Optional[str] = Field(default=None)
  30. msg: Optional[str] = Field(default=None)
  31. unread_msg_count: int = Field(default=None)
  32. msg_time: int | None = Field(default=None)
  33. # chat_history: list = Field(sa_column=Column(ARRAY(String)),default=[])
  34. detail: int = Field(default=None)
  35. create_time:datetime.datetime = Field(default_factory=datetime.datetime.now)
  36. is_done:bool = Field(default=False)
  37. '''
  38. '''
  39. class UnReadUserData(pydantic.BaseModel):
  40. id:Optional[int]
  41. name: Optional[str]
  42. avatar: Optional[str]
  43. msg: Optional[str]
  44. unread_msg_count: Optional[int]
  45. msg_time: Optional[int|str]
  46. chat_history: Optional[list|dict|str]
  47. detail: Optional[int]
  48. create_time: Optional[datetime.datetime]
  49. is_done: Optional[bool]
  50. @property
  51. def chat_history(self):
  52. return self.chat_history
  53. '''
  54. '''
  55. class UnReadUserData(Schema):
  56. id:Optional[int]
  57. name = fields.Str()
  58. avatar = fields.Str()
  59. msg = fields.Str()
  60. unread_msg_count = fields.Int()
  61. msg_time = fields.Str()
  62. chat_history = fields.List(fields.Dict())
  63. detail = fields.Str()
  64. create_time = fields.Time()
  65. is_done = fields.Bool()
  66. '''
  67. '''
  68. # https://github.com/ponyorm/pony
  69. # https://docs.ponyorm.org/
  70. from pony.orm import *
  71. from pony import orm
  72. db = Database()
  73. db.bind(provider='postgres', user='pg', password='pg', host='sv-v',port=5432, database='ai_yunying')
  74. class Person(db.Entity):
  75. name = Required(str)
  76. age = Required(int)
  77. cars = Set('Car')
  78. class Car(db.Entity):
  79. make = Required(str)
  80. model = Required(str)
  81. owner = Required(Person)
  82. db.generate_mapping(create_tables=True)
  83. p1 = Person(name='John', age=20)
  84. p2 = Person(name='Mary', age=22)
  85. p3 = Person(name='Bob', age=30)
  86. c1 = Car(make='Toyota', model='Prius', owner=p2)
  87. c2 = Car(make='Ford', model='Explorer', owner=p3)
  88. commit()
  89. '''
  90. '''
  91. from sqlalchemy import Column, Integer, String, Boolean,DateTime
  92. from sqlalchemy.dialects.postgresql import JSON
  93. from sqlalchemy.ext.declarative import declarative_base
  94. Base = declarative_base()
  95. from sqlalchemy import create_engine
  96. from sqlalchemy.orm import sessionmaker
  97. from dataset import Table
  98. from sqlalchemy.orm import as_declarative
  99. class UnReadUserData(Base):
  100. __tablename__ = 'unread_user_data'
  101. id = Column(Integer, primary_key=True, )
  102. name = Column(String)
  103. avatar = Column(String)
  104. msg = Column(DateTime)
  105. unread_msg_count = Column(Integer)
  106. msg_time = Column(String) # 或者其他适合的类型
  107. chat_history = Column(JSON)
  108. detail = Column(JSON)
  109. create_time = Column(DateTime)
  110. is_done = Column(Boolean)
  111. def to_dict(self, ignore=['id']):
  112. ret = {}
  113. for c in self.__table__.columns:
  114. if c.name not in ignore:
  115. ret[c.name] = getattr(self, c.name)
  116. return ret
  117. # 创建引擎
  118. engine = create_engine(DB_URL, echo=False)
  119. # 创建表(如果表不存在)
  120. Base.metadata.create_all(engine)
  121. # 创建会话制造工厂
  122. def add_uu():
  123. Session = sessionmaker(bind=engine)
  124. session = Session()
  125. session.add(uu)
  126. session.commit()
  127. session.close()
  128. def dataset_get():
  129. print(uu)
  130. print(uu.chat_history)
  131. print(type(uu))
  132. unread_user_data_table = ai_yunying_db['unread_user_data']
  133. # id = chat_task_table.insert(d)
  134. res = unread_user_data_table.find_one(id=1)
  135. chat_history = res.get('chat_history')
  136. print(res.get('chat_history'))
  137. print(type(chat_history))
  138. '''
  139. def main():
  140. import json
  141. import time
  142. d = {'name': '程序员马工', 'avatar': 'https://p3.huoshanimg.com/aweme/100x100/aweme-avatar/tos-cn-i-0813_66c4e34ae8834399bbf967c3d3c919db.jpeg?from=3782654143', 'msg': '你好', 'msg_time': '刚刚', 'chat_history': [{1:"555"}, {'你好':555}, {1:555}], 'detail': {'1':123}, 'unread_msg_count': 2}
  143. # uu = UnReadUserData(name='sdfasd', avatar='12312')
  144. d['msg_time'] = time.time()
  145. uu = UnReadUserData(**d)
  146. # unread_user_data_table:Table = ai_yunying_db['unread_user_data']
  147. unread_user_data_table = chat_task_table
  148. id = unread_user_data_table.insert(uu.to_dict(), types={"chat_history": JSON, "detail": JSON})
  149. res = unread_user_data_table.find_one(id=id)
  150. chat_history = res.get('chat_history')
  151. print("chat_history " , chat_history)
  152. print(type(chat_history))
  153. detail = res.get('detail')
  154. print(detail)
  155. print(type(detail))
  156. msg_time = res.get('msg_time')
  157. print("msg_time ", msg_time)
  158. print(type(msg_time))
  159. # chat_history = json.loads(chat_history)
  160. return
  161. create_all_table()
  162. with Session(engine) as session:
  163. session.add(user_data)
  164. session.commit()
  165. # data = user_data.dict()
  166. # data.pop('id')
  167. # chat_task_table.insert(data)
  168. if __name__ == "__main__":
  169. main()