class Picture(BaseModel): id = peewee.BigAutoField(unique=True, index=True, primary_key=True) uuid = peewee.CharField(unique=True, index=True, max_length=36) owner = peewee.CharField(max_length=36) class Meta: table_name = 'pictures'
class Games(BaseModel): id = pw.BigAutoField() timestamp = pw.DateTimeField(index=True) channel = pw.ForeignKeyField(Channels, backref='games', on_delete='CASCADE', index=True)
class LeaveMessagePluginData(BaseModel): """ 留言数据表 """ id = pw.BigAutoField() # 留言id ref_id = pw.BigIntegerField(default=-1) # 关联留言id(一个对话下来的留言id, 取第一个留言的id) user_id = pw.BigIntegerField(index=True) # 留言所属客户id user_name = pw.CharField(max_length=50) # 留言用户名 status = pw.CharField(max_length=20, choices=[('untreated', '未处理'), ('treating', '处理中'), ('treated', '已处理'), ('canceled', '已撤销')], default='untreated', index=True) # 处理状态 msg = pw.CharField(max_length=2000) # 客户留言信息 pic_urls = pw.CharField(max_length=1000, default='') # 客户上传的图片文件url清单, 逗号分隔 ref_msg = pw.CharField(max_length=2000, default='') # 留言引用对话消息内容 resp_time = pw.DateTimeField(null=True) # 回复时间 resp_user_id = pw.BigIntegerField(index=True, default=0) # 回复用户id resp_user_name = pw.CharField(default='') # 回复用户名 resp_msg = pw.CharField(max_length=2000, default='') # 回复信息 resp_pic_urls = pw.CharField(max_length=1000, default='') # 回复的图片文件url清单, 逗号分隔 create_time = pw.DateTimeField(default=datetime.datetime.now) # 创建时间 class Meta: # 定义数据库表名 table_name = 'leave_message_plugin_data'
class Cat(BaseModel): id = peewee.BigAutoField(unique=True, index=True, primary_key=True) uuid = peewee.CharField(unique=True, index=True, max_length=36) name = peewee.CharField(max_length=256) age = peewee.SmallIntegerField() sex = peewee.BooleanField() breed = peewee.BigIntegerField() health_status = peewee.BigIntegerField() castrated = peewee.BooleanField() vaccinated = peewee.BooleanField() dewormed = peewee.BooleanField() colour = peewee.BigIntegerField() description = peewee.TextField() health_log = peewee.TextField() adoptive = peewee.BooleanField() adopted_by = peewee.CharField(index=True, max_length=36, null=True) pictures = peewee.TextField() created_at = peewee.DateTimeField(default=datetime.datetime.now) updated_at = peewee.DateTimeField() def save(self, *args, **kwargs): self.updated_at = datetime.datetime.now() return super(Cat, self).save(*args, **kwargs) class Meta: table_name = 'cats'
class Favourite(BaseModel): id = peewee.BigAutoField(unique=True, index=True, primary_key=True) user = peewee.CharField(index=True, max_length=36) cat = peewee.CharField(max_length=36) created_at = peewee.DateTimeField(default=datetime.datetime.now) class Meta: table_name = 'favourites'
class Donation(BaseModel): id = peewee.BigAutoField(unique=True, index=True, primary_key=True) donator = peewee.CharField(index=True, max_length=36, null=True) amount = peewee.DoubleField() created_at = peewee.DateTimeField(default=datetime.datetime.now) class Meta: table_name = 'donations'
class Domain(BaseModel): id = peewee.BigAutoField(unique=True, index=True, primary_key=True) uuid = peewee.CharField(unique=True, index=True, max_length=36) domain = peewee.CharField(max_length=255) created_at = peewee.DateTimeField() updated_at = peewee.DateTimeField() class Meta: table_name = 'domains'
class Comment(BaseModel): id = peewee.BigAutoField(unique=True, index=True, primary_key=True) uuid = peewee.CharField(unique=True, index=True, max_length=36) author = peewee.CharField(index=True, max_length=36, null=True) cat = peewee.CharField(index=True, max_length=36, null=True) text = peewee.TextField() created_at = peewee.DateTimeField(default=datetime.datetime.now) class Meta: table_name = 'comments'
class RestfulApiUser(BaseModel): """ RestfulApi的使用用户表 """ id = pw.BigAutoField(primary_key=True) # 自增字段 user_name = pw.CharField(max_length=32, index=True, unique=True) # 登陆用户名 password_hash = pw.CharField(max_length=128) # 密码哈希值 class Meta: # 定义数据库表名 table_name = 'restful_api_user'
class NoMatchAnswers(BaseModel): """ 未匹配上问题记录 """ id = pw.BigAutoField() # 自增字段 session_info = pw.CharField(max_length=4000, default='') question = pw.CharField(max_length=4000) # 未匹配到的问题 create_time = pw.DateTimeField(default=datetime.datetime.now) # 创建时间 class Meta: # 定义数据库表名 table_name = 'no_match_answers'
class Mail(BaseModel): id = peewee.BigAutoField(unique=True, index=True, primary_key=True) uuid = peewee.CharField(unique=True, index=True, max_length=36) canary = peewee.CharField(max_length=36) received_on = peewee.DateTimeField() mail_from = peewee.CharField(max_length=255, column_name='from') subject = peewee.CharField(max_length=255) body = peewee.TextField() created_at = peewee.DateTimeField(default=datetime.datetime.now) updated_at = peewee.DateTimeField(default=datetime.datetime.now) class Meta: table_name = 'mail'
class VirtualAlias(BaseModel): id = peewee.BigAutoField(unique=True, index=True, primary_key=True, null=False) domain_id = peewee.ForeignKeyField(VirtualDomain, backref='aliases', null=False, on_delete='CASCADE') source = peewee.CharField(max_length=255, null=False) destination = peewee.CharField(max_length=255, null=False) class Meta: table_name = 'virtual_aliases'
class VirtualUser(BaseModel): id = peewee.BigAutoField(unique=True, index=True, primary_key=True, null=False) domain_id = peewee.ForeignKeyField(VirtualDomain, backref='users', null=False, on_delete='CASCADE') password = peewee.CharField(max_length=255, null=False) email = peewee.CharField(unique=True, max_length=255, null=False) class Meta: table_name = 'virtual_users'
class ExtQuestion(BaseModel): """ 扩展问题清单(标准问题的其他问法) """ id = pw.BigAutoField() # 自增字段 milvus_id = pw.BigIntegerField(index=True) # milvus向量ID std_question_id = pw.BigIntegerField() # 对应的标准问题ID question = pw.CharField(max_length=4000) # 问题描述字段 class Meta: # 定义数据库表名 table_name = 'ext_questions' indexes = ( # 多列唯一索引 (('milvus_id', 'std_question_id'), True), )
class User(peewee.Model): user_id = peewee.BigAutoField(primary_key=True) first_name = peewee.CharField(max_length=50, null=True) last_name = peewee.CharField(max_length=50, null=True) patronymic = peewee.CharField(max_length=50, null=True) email = peewee.CharField(max_length=50, unique=True) active = peewee.BooleanField(default=False) avatar = peewee.TextField(null=True) hashed_password = peewee.CharField(max_length=255, null=True) class Meta: table_name = 'users' database = db def __repr__(self): return f'user_id: {self.user_id}, user_fullname: {self.first_name + " " + self.last_name}'
class Canary(BaseModel): id = peewee.BigAutoField(unique=True, index=True, primary_key=True) uuid = peewee.CharField(unique=True, index=True, max_length=36) domain = peewee.CharField(max_length=36) site = peewee.CharField(max_length=36) assignee = peewee.CharField(max_length=36) updated_by = peewee.CharField(max_length=36) testing = peewee.BooleanField() setup = peewee.BooleanField() email = peewee.CharField(max_length=255) password = peewee.CharField(max_length=255) data = peewee.TextField() created_at = peewee.DateTimeField() updated_at = peewee.DateTimeField() class Meta: table_name = 'canaries'
class SendMessageQueue(BaseModel): """ 待发送客户消息列表 """ id = pw.BigAutoField(primary_key=True) # 消息id from_user_id = pw.BigIntegerField(index=True) # 消息来源用户ID from_user_name = pw.CharField(default='系统') # 消息来源用户名 user_id = pw.BigIntegerField(index=True) # 要推送到的用户ID msg_type = pw.CharField( choices=[('text', '文本数组'), ('json', 'json字符串'), ], default='text', ) # 消息类型 msg = pw.CharField(max_length=4000) # 消息内容 create_time = pw.DateTimeField(default=datetime.datetime.now) # 创建时间 class Meta: # 定义数据库表名 table_name = 'send_message_queue'
class Messages(BaseModel): id = pw.BigAutoField() timestamp = pw.DateTimeField(index=True) state = pw.IntegerField(index=True) content = pw.TextField() word = pw.ForeignKeyField(Words, backref='messages', on_delete='CASCADE', index=True) game = pw.ForeignKeyField(Games, backref='game', on_delete='CASCADE', index=True, null=True) channel = pw.ForeignKeyField(Channels, backref='messages', on_delete='CASCADE', index=True) user = pw.ForeignKeyField(Users, backref='messages', index=True)
class FormPluginData(BaseModel): """ 通用表单数据存储(如果自定义表,也需跟该表结构一致) """ id = pw.BigAutoField() # 表单id form_type = pw.CharField(max_length=50, index=True) # 表单类型标识 user_id = pw.BigIntegerField(index=True) # 表单所属客户id user_name = pw.CharField(max_length=50) # 表单用户名 status = pw.CharField(max_length=20, choices=[('untreated', '未处理'), ('treating', '处理中'), ('treated', '已处理'), ('canceled', '已撤销')], default='untreated', index=True) # 处理状态 preview = pw.CharField(max_length=4000) # 预览,json字符串格式,data的一部分内容,用于预览显示 data = pw.BlobField() # 表单详细数据, json字符串的格式转为二进制存储 last_upd_time = pw.DateTimeField(default=datetime.datetime.now) # 最后更新时间 create_time = pw.DateTimeField(default=datetime.datetime.now) # 创建时间 class Meta: # 定义数据库表名 table_name = 'form_plugin_data'
class StdQuestion(BaseModel): """ 标准问题清单 """ id = pw.BigAutoField() # 自增字段 tag = pw.CharField(default='', index=True) # 查找问题的字符标识 q_type = pw.CharField( choices=[('ask', '问答类'), ('context', '场景类')], default='ask', ) # 问题类型, ask-问答类(问题对应答案),context-场景类(问题对应上下文场景) milvus_id = pw.BigIntegerField(index=True) # milvus向量ID collection = pw.CharField() # 问题所属分类集 partition = pw.CharField(default='') # 问题所属场景 question = pw.CharField(max_length=4000) # 问题描述字段 class Meta: # 定义数据库表名 table_name = 'std_questions' indexes = ( # 多列唯一索引 (('milvus_id', 'collection', 'partition'), False), )
class User(BaseModel): id = peewee.BigAutoField(unique=True, index=True, primary_key=True) uuid = peewee.CharField(unique=True, index=True, max_length=36) email = peewee.CharField(unique=True, index=True) password = peewee.CharField(max_length=1024) firstname = peewee.CharField(max_length=256) lastname = peewee.CharField(max_length=256) activated = peewee.BooleanField(default=False) admin = peewee.BooleanField(default=False) picture = peewee.CharField(max_length=36) created_at = peewee.DateTimeField(default=datetime.datetime.now) updated_at = peewee.DateTimeField() def getName(self): return self.firstname + ' ' + self.lastname def save(self, *args, **kwargs): self.updated_at = datetime.datetime.now() return super(User, self).save(*args, **kwargs) class Meta: table_name = 'users'
class Message(BaseModel): id = peewee.BigAutoField(unique=True) listener = peewee.ForeignKeyField(Listener, on_delete='CASCADE') data = peewee.TextField() timestamp = peewee.DateTimeField()
class Users(BaseModel): id = pw.BigAutoField() discord_user_id = pw.BigIntegerField(unique=True) name = pw.CharField(null=True)
class Colour(BaseModel): id = peewee.BigAutoField(unique=True, index=True, primary_key=True) name = peewee.CharField(unique=True, max_length=256) class Meta: table_name = 'colours'
class BannedWords(BaseModel): id = pw.BigAutoField() word = pw.CharField(unique=True)
class Test_Table(peewee.Model): id = peewee.BigAutoField(primary_key=True) name = peewee.CharField(10) status = TinyIntegerField(default=0)
class Channels(BaseModel): id = pw.BigAutoField() discord_id = pw.BigIntegerField() name = pw.CharField(null=True) current_game = pw.DeferredForeignKey('Games', null=True) game_running = pw.BooleanField(default=False)
class Listener(BaseModel): id = peewee.BigAutoField(unique=True) chat_id = peewee.CharField() key = peewee.CharField() description = peewee.CharField() enable = peewee.BooleanField(default=True)
class Message(MySQLBaseModel): SEND_PENDING = 0 SEND_SUCCESS = 1 SEND_FAIL = 2 id = peewee.BigAutoField(primary_key=True) message = peewee.TextField() send_status = peewee.SmallIntegerField(default=SEND_PENDING) is_deleted = peewee.BooleanField(default=False) created_at = peewee.DateTimeField(default=datetime.datetime.now) updated_at = peewee.DateTimeField(default=datetime.datetime.now) class Meta: db_table = 'message' @classmethod def get_record(cls, id=None, order_by='id', order_type='desc', to_dict=True): if id is not None: data = cls.select().where(cls.id == id, cls.is_deleted == 0).first() else: order_field = getattr(cls, order_by) if order_type.lower() == 'asc': data = cls.select().where( cls.is_deleted == 0).order_by(-order_field) else: data = cls.select().where( cls.is_deleted == 0).order_by(+order_field) if to_dict: if isinstance(data, peewee.SelectQuery): data = [model2dict(i) for i in data] else: data = model2dict(data) return data @classmethod def add_record(cls, message, to_dict=True): data = cls.create(message=message) if to_dict: data = model2dict(data) return data @classmethod def delete_record(cls, id, real=False): if real: query = cls.delete().where(cls.id == id) else: query = cls.update(is_deleted=True).where(cls.id == id) count = query.execute() data = {'deleted_count': count} return data @classmethod def update_record(cls, id, send_status=None, is_deleted=None, to_dict=True): data = cls.select().where(cls.id == id, cls.is_deleted == 0).first() if not data: return if send_status is not None: data.send_status = send_status if is_deleted is not None: data.is_deleted = is_deleted data.save() if to_dict: data = model2dict(data) return data
name = peewee.CharField(max_length=256) created_at = peewee.DateTimeField(default=datetime.now) class ModelB(peewee.Model): model_a = peewee.ForeignKeyField(ModelA) title = peewee.CharField(max_length=5) speed = peewee.IntegerField() @pytest.mark.parametrize('field,value,expected,expected_type', [ (peewee.IntegerField(), 5, 5, int), (peewee.BigIntegerField(), 5, 5, int), (peewee.SmallIntegerField(), 5, 5, int), (peewee.AutoField(), 5, 5, int), (peewee.BigAutoField(), 5, 5, int), (peewee.IdentityField(), 5, 5, int), (peewee.FloatField(), 5.5, 5.5, float), (peewee.DoubleField(), 5.5, 5.5, float), (peewee.DecimalField(), Decimal('13.37'), '13.37', str), (peewee.CharField(), 'foo', 'foo', str), (peewee.FixedCharField(), 'foo', 'foo', str), (peewee.TextField(), 'foo', 'foo', str), (peewee.BooleanField(), True, True, bool), (peewee.DateTimeField(), datetime(2018, 11, 1), '2018-11-01T00:00:00', str), (postgres_ext.HStoreField(), { 'foo': 'bar' }, { 'foo': 'bar' }, dict),