class HtAddressBook(Base): __tablename__ = 'ht_address_book' id = Column(INTEGER(11), primary_key=True, comment='编号') be_focused_user_id = Column(INTEGER(11), nullable=False, comment='被关注者用户编号') focused_user_id = Column(INTEGER(11), nullable=False, index=True, comment='关注者用户编号') created_at = Column(INTEGER(11), nullable=False, comment='创建时间') updated_at = Column(INTEGER(11), nullable=False, comment='更新时间') room_uuid = Column(VARCHAR(255), nullable=False, server_default=text("''"), comment='房间唯一编号') save_action = Column(TINYINT(1), nullable=False, server_default=text("'0'"), comment='保存方式') is_alert = Column(TINYINT(1), nullable=False, comment='是否提醒') unread_number = Column(INTEGER(11), nullable=False, comment='未读取信息次数')
class QiScoreCall(Base): __tablename__ = 'qi_score_call' insert_time = Column(INTEGER(11)) is_deleted = Column(SMALLINT(6), nullable=False, server_default=text("'0'")) id = Column(INTEGER(11), primary_key=True) call_id = Column(VARCHAR(64), nullable=False) qc_time = Column(DateTime, nullable=False, index=True) hit_rules = Column(String(1000)) qc_score = Column(INTEGER(11), nullable=False, index=True) def keys(self): return [ 'insert_time', 'is_deleted', 'id', 'call_id', 'qc_time', 'hit_rules', 'qc_score', ]
class Role(db.Model, OutputMixin): """角色""" __tablename__ = 'role' __table_args__ = {'mysql_collate': 'utf8mb4_general_ci'} id = Column(INTEGER(unsigned=True), primary_key=True) name = Column(VARCHAR(30), unique=True) permissions = relationship('Permission', secondary=role_has_permissions, back_populates='roles') users = relationship('User', back_populates='role') def __repr__(self): return "Role<%s %s>" % (self.id, self.name) def to_json(self, rel=None): return { 'id': self.id, 'name': self.name, 'permissions': [i.to_json() for i in self.permissions] }
class AppEntity(TableBase): entity = sa.Column(INTEGER(unsigned=True), nullable=False, primary_key=True) agent_id = sa.Column(INTEGER(unsigned=True), nullable=False) group_id = sa.Column(sa.ForeignKey('groups.group_id', ondelete="RESTRICT", onupdate='RESTRICT'), nullable=False) objtype = sa.Column(VARCHAR(64), nullable=False) platform = sa.Column(TINYINT(unsigned=True), nullable=False, default=0) opentime = sa.Column(INTEGER(unsigned=True), nullable=True) status = sa.Column(TINYINT(64), nullable=False, default=common.UNACTIVE) cross_id = sa.Column(INTEGER(unsigned=True), nullable=True) set_id = sa.Column(INTEGER(unsigned=True), nullable=True) # 资源版本优先级设置, key pakcage id value version versions = sa.Column(BLOB, nullable=True) areas = orm.relationship(GameArea, backref='appentity', lazy='select', cascade='delete,delete-orphan') databases = orm.relationship(AreaDatabase, backref='appentity', lazy='select', cascade='delete,delete-orphan') __table_args__ = ( sa.Index('agent_id_index', 'agent_id'), sa.Index('group_id_index', 'group_id'), InnoDBTableBase.__table_args__ )
class province(Base): # 指定表名称 __tablename__ = "province" # 主键 id = Column(INTEGER, primary_key=True, autoincrement=True) #省份名称 province_name = Column(VARCHAR(64), comment='省份名称') #今日新增加 today_confirm = Column(INTEGER, comment='今日新增加') #累计确诊 total_confirm = Column(INTEGER, comment='累计确诊') # 每日新增现有疑似 suspect = Column(INTEGER, comment="现有疑似") # 累计死亡 dead = Column(INTEGER, comment="累计死亡") #当前死亡率 deadRate = Column(DECIMAL(5, 2), comment='当前死亡率') # 累计治愈 heal = Column(INTEGER, comment="累计治愈") #治愈率 healRate = Column(DECIMAL(5, 2), comment='治愈率') # 更新时间 create_dt = Column(DATETIME, comment="更新时间")
class User(Base): __tablename__ = 'user' id = Column(INTEGER(11), primary_key=True, comment='id') username = Column(VARCHAR(64), nullable=False, comment='用户名') password = Column(String(32), nullable=False, comment='密码') access_level = Column(INTEGER(255), server_default=text("1"), comment='权限等级') last_login = Column(TIMESTAMP, server_default=text("current_timestamp()"), comment='上次登录时间') create_time = Column(TIMESTAMP, server_default=text("current_timestamp()"), comment='创建时间') def verify_password(self, password): return self.password == password def generate_auth_token(self, expiration=3600): s = Serializer(current_app.config['SECRET_KEY'], expires_in=expiration) return s.dumps({'id': self.id}).decode('ascii') def save_token(self, id, token): cache.set(id, token, timeout=3600) @staticmethod def verify_parse_token(token): s = Serializer(app.config['SECRET_KEY']) try: data = s.loads(token) except SignatureExpired: return None # valId token, but expired except BadSignature: return None # invalId token # user = db.session.query(UUser).get(data['id']) return data
class AreaDatabase(TableBase): quote_id = sa.Column(INTEGER(unsigned=True), nullable=False, primary_key=True) database_id = sa.Column(INTEGER(unsigned=True), nullable=False) entity = sa.Column(sa.ForeignKey('appentitys.entity', ondelete="CASCADE", onupdate='RESTRICT'), nullable=False) subtype = sa.Column(VARCHAR(64), nullable=False) host = sa.Column(VARCHAR(200), default=None, nullable=False) port = sa.Column(SMALLINT(unsigned=True), default=3306, nullable=False) user = sa.Column(VARCHAR(64), default=None, nullable=False) passwd = sa.Column(VARCHAR(128), default=None, nullable=False) ro_user = sa.Column(VARCHAR(64), default=None, nullable=False) ro_passwd = sa.Column(VARCHAR(128), default=None, nullable=False) character_set = sa.Column(VARCHAR(64), default='utf8', nullable=True) __table_args__ = (sa.UniqueConstraint('entity', 'subtype', name='type_unique'), InnoDBTableBase.__table_args__)
class StockShareholderTop10(Base): __tablename__ = 'stock_shareholder_top10' code = Column(VARCHAR(12), primary_key=True, nullable=False) company_name = Column(VARCHAR(100), primary_key=True, nullable=False) end_date = Column(Date, primary_key=True, nullable=False) pub_date = Column(Date) change_reason_id = Column(Float(asdecimal=True)) change_reason = Column(VARCHAR(120)) shareholder_rank = Column(BIGINT(20)) shareholder_name = Column(VARCHAR(200), primary_key=True, nullable=False) shareholder_name_en = Column(VARCHAR(200)) shareholder_id = Column(INTEGER(11)) shareholder_class_id = Column(INTEGER(11)) shareholder_class = Column(VARCHAR(150)) share_number = Column(BIGINT(20)) share_ratio = Column(DECIMAL(10, 4)) sharesnature_id = Column(INTEGER(11)) sharesnature = Column(VARCHAR(120)) share_pledge_freeze = Column(DECIMAL(10, 4)) share_pledge = Column(DECIMAL(10, 4)) share_freeze = Column(DECIMAL(10, 4))
class OmsOrderItem(Base): __tablename__ = 'oms_order_item' __table_args__ = {'comment': '订单中所包含的商品'} id = Column(BIGINT(20), primary_key=True) order_id = Column(ForeignKey('oms_order.id'), index=True, comment='订单id') order_sn = Column(VARCHAR(64), comment='订单编号') product_id = Column(BIGINT(20)) product_pic = Column(VARCHAR(500)) product_name = Column(VARCHAR(200)) product_brand = Column(VARCHAR(200)) product_sn = Column(VARCHAR(64)) product_price = Column(DECIMAL(10, 2), comment='销售价格') product_quantity = Column(INTEGER(11), comment='购买数量') product_sku_id = Column(BIGINT(20), comment='商品sku编号') product_sku_code = Column(VARCHAR(50), comment='商品sku条码') product_category_id = Column(BIGINT(20), comment='商品分类id') product_attr = Column( VARCHAR(500), comment='商品销售属性:[{"key":"颜色","value":"颜色"},{"key":"容量","value":"4G"}]') order = relationship('OmsOrder')
class AgentEndpoint(PluginTableBase): id = sa.Column(BIGINT(unsigned=True), nullable=False, primary_key=True, autoincrement=True) endpoint = sa.Column(VARCHAR(manager_common.MAX_ENDPOINT_NAME_SIZE), nullable=False) agent_id = sa.Column(sa.ForeignKey('agents.agent_id', ondelete="CASCADE", onupdate='RESTRICT'), nullable=False) entitys = orm.relationship(AgentEntity, backref='agentendpoint', lazy='select', cascade='delete,delete-orphan,save-update') ports = orm.relationship(AllocatedPort, backref='agentendpoint', lazy='select', cascade='delete,delete-orphan') __table_args__ = (sa.UniqueConstraint('endpoint', 'agent_id', name='unique_endpoint'), sa.Index('endpoint_index', 'endpoint'), InnoDBTableBase.__table_args__)
class Message(db.Model): __tablename__ = 'Message' mid = db.Column(INTEGER(11), primary_key=True, autoincrement=True) senderid = db.Column(ForeignKey('ChannelMembership.uid')) cid = db.Column(ForeignKey('ChannelMembership.cid')) content = db.Column(VARCHAR(500), nullable=False) sendtime = db.Column(DateTime) def __init__(self, senderid, cid, content, sendtime): self.senderid = senderid self.cid = cid self.content = content self.sendtime = sendtime def to_json(self): json_comment = { 'mid': self.mid, 'senderid': self.senderid, 'cid': self.cid, 'content': self.content, 'sendtime': self.sendtime } return json_comment
class Role(Base, BaseModelMixin): __tablename__ = 'role' __comment__ = '角色表' name = Column(VARCHAR(36), nullable=False, comment='角色名') description = Column(TEXT, comment='角色描述') class Status(Enum): INITIALIZATION = 0 VALID = 1 DELETED = 2 INVALID = 3 class BuiltInRole(Enum): REGISTRATION_USER = BuiltInRoleObject('注册会员', '注册会员') ADMINISTRATOR = BuiltInRoleObject('超级管理员', '超级管理员') BAN_LIST = BuiltInRoleObject('小黑屋', '小黑屋') def __init__(self, name, description, *args, **kwargs): super().__init__(*args, **kwargs) self.name = name self.description = description self.status = self.Status.VALID.value
class Question(db.Model, BaseClass): """ mcq questions corresponding to each passage """ __bind_key__ = DATABASE_BIND_KEY __tablename__ = "question" __table_args__ = {"mysql_engine": "InnoDB"} passage_id = Column(BIGINT, ForeignKey(Passage.id, onupdate="CASCADE", ondelete="CASCADE"), nullable=False) question_id = Column(BIGINT, autoincrement=True, primary_key=True) question = Column(VARCHAR(200, unicode=True), nullable=False) options = relationship("MultipleOption", lazy="select", backref="question", cascade="save-update, merge, delete") correct_answer = relationship("Answer", lazy="select", backref="question", cascade="save-update, merge, delete")
class Board(Base): __tablename__ = 'Board' boardIndex = Column(INTEGER(unsigned=True), primary_key=True, autoincrement=True, nullable=False) userIndex = Column(INTEGER(unsigned=True), autoincrement=False, nullable=False) problemIndex = Column(INTEGER(unsigned=True), autoincrement=False, nullable=False) title = Column(VARCHAR(80), unique=False) content = Column(String, unique=False) likeCount = Column(INTEGER(unsigned=True), autoincrement=False, nullable=False)
def test_imports_in_script(self): from sqlalchemy import MetaData, Table, Column from sqlalchemy.dialects.mysql import VARCHAR type_ = VARCHAR(20, charset="utf8", national=True) m = MetaData() Table("t", m, Column("x", type_)) def process_revision_directives(context, rev, generate_revisions): generate_revisions[0].imports.add( "from sqlalchemy.dialects.mysql import TINYINT") with self._env_fixture( m, process_revision_directives=process_revision_directives): rev = command.revision(self.cfg, message="some message", autogenerate=True) with open(rev.path) as file_: contents = file_.read() assert "from sqlalchemy.dialects import mysql" in contents assert "from sqlalchemy.dialects.mysql import TINYINT" in contents
class UserFission(BaseModel): __tablename__ = "users_fissions" id = Column(Integer, primary_key=True) parent_user_id = Column(Integer) from_user_id = Column(Integer) user_id = Column(Integer) video_id = Column(VARCHAR(64)) create_time = Column(Integer) update_time = Column(Integer) def conv_result(self): ret = {} ret["id"] = self.id ret["parent_user_id"] = self.parent_user_id ret["from_user_id"] = self.from_user_id ret["user_id"] = self.user_id ret["video_id"] = self.video_id ret["create_time"] = self.create_time ret["update_time"] = self.update_time return ret
class Model(Base): __tablename__ = 'tag' ID = Column(INTEGER(5), primary_key=True, autoincrement=True) name = Column(VARCHAR(20), nullable=False, comment='tag名') father = Column(INTEGER(5), nullable=True) def get_dict(self, get_children=False): """ 获取字典 :param get_children: 是否获取子目录 :return: """ return { 'ID': self.ID, 'name': self.name, 'father': self.father } if not get_children else { 'ID': self.ID, 'name': self.name, 'father': self.father, 'type': 0, 'children': get_tag_children(self.ID) + get_tag_article(self.ID) }
class IndustryModel(BaseModel): __tablename__ = 'industry' id = Column(INTEGER, primary_key=True, autoincrement=True) name = Column(VARCHAR(64), doc=u'行业名称') @classmethod def get(cls, name): query = cls.session.query(cls).filter(cls.name == name) return query.one_or_none() @classmethod def insert_if_not_exist(cls, name): """ 如果不存在 name == name 的数据库记录,则插入该条记录 :param name: :return: """ sql = text("""INSERT INTO industry(name) SELECT :name AS name FROM dual WHERE NOT EXISTS (SELECT id FROM industry WHERE name = :name)""") cls.session.execute(sql, {'name': name}) cls.session.commit()
class MessageSendDetail(BaseModel): __tablename__ = "messages_send_detail" id = Column(Integer, primary_key=True) message_id = Column(Integer) from_user_id = Column(Integer) group_id = Column(VARCHAR(64)) user_id = Column(Integer) create_time = Column(Integer) update_time = Column(Integer) def conv_result(self): ret = {} ret["id"] = self.id ret["message_id"] = self.message_id ret["from_user_id"] = self.from_user_id ret["group_id"] = self.group_id ret["user_id"] = self.user_id ret["create_time"] = self.create_time ret["update_time"] = self.update_time return ret
class SushiJournalYOPMetric(Base): __tablename__ = 'sushi_journal_yop_metric' __table_args__ = (UniqueConstraint('year_month_day', 'collection', 'yop', 'idjournal_sjym', name='uni_col_date_yop_jou_sjym'), ) __table_args__ += (Index('idx_col_date_yop_sjym', 'collection', 'year_month_day', 'yop', 'idjournal_sjym'), ) id = Column(INTEGER(unsigned=True), primary_key=True, autoincrement=True) collection = Column(VARCHAR(3), nullable=False) idjournal_sjym = Column( INTEGER(unsigned=True), ForeignKey('counter_journal.id', name='idjournal_sjym')) yop = Column(INTEGER(4)) year_month_day = Column(Date, nullable=False) total_item_requests = Column(Integer, nullable=False) total_item_investigations = Column(Integer, nullable=False) unique_item_requests = Column(Integer, nullable=False) unique_item_investigations = Column(Integer, nullable=False)
class Device(Base): __tablename__ = 'device' interface = Column('interface', VARCHAR(32), primary_key=False) device_ip = Column('device_ip', VARBINARY(16), primary_key=False) sensor_id = Column('sensor_id', BINARY(16), primary_key=False) id = Column('id', INTEGER, primary_key=True) # # Relations: # @property def serialize(self): """ Converts the object in a serializable object :return: A dict object with all the row field. """ hash_table = { 'interface': str(self.interface), 'device_ip': get_ip_str_from_bytes(self.device_ip), 'sensor_id': get_uuid_string_from_bytes(self.sensor_id), 'id': str(self.id), } return hash_table
class Group(Base): __tablename__ = 'meetup_groups' id = Column(BIGINT(20), primary_key=True, autoincrement=False) urlname = Column(VARCHAR(200), unique=True) category_name = Column(VARCHAR(50)) category_shortname = Column(VARCHAR(50)) city = Column(VARCHAR(100)) country = Column(VARCHAR(100)) created = Column(BIGINT(20)) description = Column(TEXT(collation="utf8mb4_unicode_ci")) lat = Column(DECIMAL(6, 3)) lon = Column(DECIMAL(6, 3)) members = Column(INT) name = Column(TEXT(collation="utf8mb4_unicode_ci")) topics = Column(JSON) category_id = Column(INT) country_name = Column(VARCHAR(100)) timestamp = Column(TIMESTAMP)
class PmsComment(Base): __tablename__ = 'pms_comment' __table_args__ = {'comment': '商品评价表'} id = Column(BigInteger, primary_key=True) product_id = Column(BigInteger) member_nick_name = Column(VARCHAR(255)) product_name = Column(VARCHAR(255)) star = Column(Integer, comment='评价星数:0->5') member_ip = Column(VARCHAR(64), comment='评价的ip') create_time = Column(DateTime) show_status = Column(Integer) product_attribute = Column(VARCHAR(255), comment='购买时的商品属性') collect_couont = Column(Integer) read_count = Column(Integer) content = Column(TEXT) pics = Column(VARCHAR(1000), comment='上传图片地址,以逗号隔开') member_icon = Column(VARCHAR(255), comment='评论用户头像') replay_count = Column(Integer)
class VideoModel(Base): __tablename__ = 'video' id = Column('id', INTEGER(display_width=11, unsigned=True), primary_key=True, nullable=False) cloud = Column('cloud', VARCHAR(length=16), nullable=False) bucket = Column('bucket', VARCHAR(length=64), nullable=False) key = Column('key', VARCHAR(length=128), nullable=False) etag = Column('etag', VARCHAR(length=32)) mime_type = Column('mime_type', VARCHAR(length=16)) size = Column('size', INTEGER(display_width=10, unsigned=True)) duration = Column('duration', INTEGER(display_width=10, unsigned=True), server_default=DefaultClause(TextClause('0'))) width = Column('width', INTEGER(display_width=10, unsigned=True), server_default=DefaultClause(TextClause('0'))) height = Column('height', INTEGER(display_width=10, unsigned=True), server_default=DefaultClause(TextClause('0'))) persistent_id = Column('persistent_id', VARCHAR(length=32)) pfop_vframe_status = Column('pfop_vframe_status', TINYINT(display_width=1), nullable=False, server_default=DefaultClause(TextClause('0'))) pfop_transcode_status = Column('pfop_transcode_status', TINYINT(display_width=1), nullable=False, server_default=DefaultClause(TextClause('0'))) status = Column('status', TINYINT(display_width=1), nullable=False, server_default=DefaultClause(TextClause('0'))) create_ts = Column('create_ts', INTEGER(display_width=10), server_default=DefaultClause(TextClause('0'))) __table_args__ = ( Index('video_cloud_bucket_key_index_unique', 'cloud', 'bucket', 'key', unique=True), )
class Information(Base): __tablename__ = table_name __table_args__ = {'extend_existing': True} id = Column(BIGINT(20), primary_key=True) title = Column(VARCHAR(45), nullable=False) author = Column(VARCHAR(45), nullable=False, unique=True) board = Column(VARCHAR(45), nullable=False) hits = Column(VARCHAR(45), nullable=False) url = Column(VARCHAR(4096), nullable=False, unique=True) posted_date = Column(TIMESTAMP, nullable=False) description = Column(VARCHAR(4096)) created_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP")) updated_time = Column( TIMESTAMP, nullable=False, server_default=text( "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
class HandInHomework(Base): __tablename__ = "HandInHomework" submitUserName = Column(VARCHAR(100), ForeignKey('PUser.userName'), primary_key=True, nullable=False) gradeUserName = Column(VARCHAR(100), ForeignKey('PUser.userName'), nullable=True) grades = Column(NUMERIC(5, 2)) handInTime = Column(DATETIME(fsp=2), primary_key=True) fileName = Column(VARCHAR(256), nullable=False) file = Column(VARCHAR(256), nullable=False) courseDescriptor = Column(VARCHAR(256), ForeignKey('Course.courseDescriptor'), nullable=False) homeworkTitle = Column(VARCHAR(100), ForeignKey('Homework.homeworkTitle'), nullable=False) def __init__(self, susername, gusername, grade, hdintime, fil, descriptor, hwtitle, filen): self.submitUserName = susername self.gradeUserName = gusername self.grades = grade self.handInTime = hdintime self.file = fil self.courseDescriptor = descriptor self.homeworkTitle = hwtitle self.fileName = filen
class LDetails(Base): __tablename__ = 'L_details' Id = Column(INTEGER(11), primary_key=True) Url = Column(VARCHAR(255)) BugNumber = Column(CHAR(30)) BugTitle = Column(VARCHAR(255)) BugCompany = Column(VARCHAR(255)) BugAuthor = Column(VARCHAR(255)) SubmitTime = Column(DATETIME()) OpenTime = Column(DATETIME()) BugType = Column(VARCHAR(255)) BugLevel = Column(VARCHAR(255)) BugDescribe = Column(TEXT()) BugState = Column(TEXT()) BugProve = Column(TEXT()) BugPatch = Column(TEXT()) Attention = Column(INTEGER(11)) Collect = Column(INTEGER(11)) ReplyType = Column(VARCHAR(255)) ReplyRank = Column(INTEGER(11)) ReplyTime = Column(DATETIME(255)) ReplyDetails = Column(TEXT()) ReplyNew = Column(TEXT())
class GopDatabase(TableBase): database_id = sa.Column(INTEGER(unsigned=True), nullable=False, primary_key=True, autoincrement=True) # local, record, cloud.aliyun, cloud.qcloud impl = sa.Column(VARCHAR(64), default=None, nullable=False) # database type, mysql or redis dbtype = sa.Column(VARCHAR(64), default='mysql', nullable=False) dbversion = sa.Column(VARCHAR(64), default=None, nullable=True) reflection_id = sa.Column(VARCHAR(128), nullable=False) user = sa.Column(VARCHAR(64), default=None, nullable=False) # passwd none means database can not be control passwd = sa.Column(VARCHAR(128), default=None, nullable=True) status = sa.Column(TINYINT, default=common.UNACTIVE, nullable=False) # bitwise operation for affinity affinity = sa.Column(TINYINT, default=0, nullable=False) # 0 means a master database slave = sa.Column(TINYINT(unsigned=True), default=0, nullable=False) desc = sa.Column(VARCHAR(256), nullable=True) slaves = orm.relationship(GopSalveRelation, lazy='select', cascade='delete,delete-orphan') schemas = orm.relationship(GopSchema, backref='database', lazy='select', cascade='delete,delete-orphan') quotes = orm.relationship(SchemaQuote, backref='database', lazy='select', cascade='delete,delete-orphan') __table_args__ = (sa.Index('impl_index', impl), sa.UniqueConstraint('impl', 'reflection_id', name='unique_reflection'), InnoDBTableBase.__table_args__)
class User(db.Model): __tablename__ = 'User' __table_args__ = { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'extend_existing': True } id = db.Column(BIGINT(20, unsigned=True), primary_key=True, index=True) name = db.Column(VARCHAR(128)) username = db.Column(VARCHAR(128), unique=True) email = db.Column(VARCHAR(128)) phone = db.Column(VARCHAR(20)) password = db.Column(VARCHAR(128)) birthday = db.Column(DATETIME()) joinDate = db.Column(DATETIME()) authority = db.Column(VARCHAR(20)) def as_dict(self): dict = {} for c in self.__table__.columns: if c.name == "password": continue if c.name == "birthday": tmp = getattr(self, c.name).strftime("%Y-%m-%d") dict[c.name] = tmp else: if c.name == "joinDate": tmp = getattr(self, c.name).__str__() dict[c.name] = tmp else: dict[c.name] = getattr(self, c.name) return dict
class Device(Base): __tablename__ = 'device' id = Column(INTEGER(display_width=10), primary_key=True) name = Column(VARCHAR(length=50)) type = Column(VARCHAR(length=50)) company = Column(VARCHAR(length=50)) model = Column(VARCHAR(length=50)) sn = Column(VARCHAR(length=50)) version = Column(VARCHAR(length=50)) status = Column(ENUM('normal', 'abnormal')) updated_at = Column(TIMESTAMP, nullable=False) created_at = Column(TIMESTAMP, nullable=False) deleted_at = Column(TIMESTAMP, nullable=True) station_id = Column(INTEGER(display_width=10), ForeignKey('station.id')) station = relationship('Station', back_populates='devices') device_configs = relationship('Device_config', back_populates='device') device_datas = relationship('Device_data', back_populates='device')