zoukankan      html  css  js  c++  java
  • Flask之模型字段解析与OA建模实训

     flask常用的模型字段和参数

    常用的字段类型表

    字段说明

    映射到数据库对应类型

    Integer

    整数

    int类型

    String

    字符串,String类内可选择length参数的值用于设置最大字符个数

    varchar类型

    Text

    用于储存较长的Unicode文本,,理论上可以储存65535个字节

    text类型

    Date

    日期,存储Pythondatetime.date 对象

    date类型

    Time

    时间,存储Pythondatetime.time 对象

    time类型

    DateTime

    时间和日期,存储Python 的datetime 对象

    datetime类型

    Float

    浮点类型

    float类型

    Double

    双精度浮点类型,比浮点类型小数位精度更高。

    double类型,占据64位。

    Boolean

    布尔值

    tinyint类型

    Enum

    枚举类型

    enum类型

    DECIMAL

    保存固定精度的数据,DECIMAL(长度, 小数的位数)

    decimal类型

    Column常用参数表

    约束

    说明

    primary_key

    如果设为True,该列就是表的主键

    unique

    如果设为True,该列每个值唯一,也就是该字段不允许出现重复值

    index

    如果设为True,为这列创建索引,用于提升查询效率

    nullable

    如果设为True,这列允许使用空值,反之则不允许使用空值。

    server_default

    为这列定义默认值, 会映射到表结构,默认值只支持字符串,其他类型需要db.text()方法指定

    default

    为这列定义默认值,但是该约束并不会真正映射到表结构中,该约束只会在ORM层面实现

    comment

    该字段的注释

    name

    可以使用该参数直接指定字段名

    autoincrement

    设置这个字段为自动增长的。

    server_default常用配置

    配置默认值类型

    代码

    更新datatime时间

    server_default = db.text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")

    当前的datatime时间

    server_default = db.text("CURRENT_TIMESTAMP")

    字符

    server_default='字符'

    数字

    server_default=db.text('数字') 

    常用关系选项

     选项名  描述
    backref 在关系的另一模型中添加反向引用 
    uselist 如果为False,不使用列表,而使用标量值,一对一关系时使用 
    order_by 指定关系中记录的排序方式
    secondary 指定多对多中关系表的名字
    secondary join  在SQLAlchemy中无法自行决定时,指定多对多关系中的二级联结条件
    primary join 明确指定两个模型之间使用的联结条件
           

    其中Flask中如下两个字段的默认值区分

    create_time1 = db.Column(db.DateTime, default=datetime.now)
    
    create_time2 = db.Column(db.DateTime, default=datetime.now())

    两者的区别:

    第一个插入的是当前时间,每条数据插入时可自动根据当前时间生成

    第二条是一个固定的时间, 程序部署的时间,所有的数据都是这个固定时间。

    onupdate参数--->记录每次修改的时间

    update_time = db.Column(db.DateTime, default=datetime.now,onupdate=datetime.now)

    OA模型之训练

    from OAPro import db
    from datetime import datetime
    
    class BaseModel(db.Model):
        """模型基类"""
        __abstract__ = True
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    
        def save(self):
            session = db.session()
            session.add(self)
            session.commit()
    
        def delete(self):
            session = db.session()
            session.delete(self)
            session.commit()
    
        def update(self):
            session = db.session()
            session.commit()
    
    class Department(BaseModel):
        """部门表"""
        __tablename__ = 'department'
        dep_name = db.Column(db.String(32),unique=True)
        dep_description = db.Column(db.Text)
        d_e = db.relationship('Employee', backref='e_d')
        d_p = db.relationship('Position', backref='p_d')
    
    class Position(BaseModel):
        """职位表"""
        __tablename__ = 'position'
        p_name = db.Column(db.String(32))
        level = db.Column(db.String(6))  # 职级
        description = db.Column(db.Text)  # 描述
        p_department = db.Column(db.Integer, db.ForeignKey('department.id'),comment='职位的部门')
        p_e = db.relationship('Employee', backref='e_p')
        p_power = db.relationship('Power',backref = 'power_p',secondary='position_power')
    
    class Account(BaseModel):
        """账户表"""
        __tablename__='account'
        username = db.Column(db.String(32),unique=True,nullable=False)
        password = db.Column(db.String(128) ,nullable=False)
        is_activate = db.Column(db.SmallInteger, server_default=db.text('0'))  # 是否激活
    a_e = db.relationship('Employee', backref='e_a', uselist=False) #一对一反向关系映射 class Employee(BaseModel): """职员表""" __tablename__ = 'employee' name = db.Column(db.String(32)) gender = db.Column(db.String(4)) age = db.Column(db.SmallInteger) nation = db.Column(db.String(16)) education = db.Column(db.String(16)) phone = db.Column(db.String(11)) email = db.Column(db.String(32)) photo = db.Column(db.String(32)) join_time = db.Column(db.DATE) # 入职时间 emp_position = db.Column(db.Integer, db.ForeignKey('position.id')) emp_department = db.Column(db.Integer, db.ForeignKey('department.id')) account_id = db.Column(db.Integer, db.ForeignKey('account.id')) e_n = db.relationship('Notice', backref='n_e') e_s = db.relationship('Salary', backref='s_e') e_l = db.relationship('Leave', backref='l_e') e_power=db.relationship('Power',backref='power_e',secondary='employee_power') class Notice(BaseModel): """通告表""" __tablename__ = 'notice' title = db.Column(db.String(60),comment='标题') notice_type = db.Column(db.String(32)) # 通告的类型 public_time = db.Column(db.DateTime,comment='发布时间',default=datetime.now) content = db.Column(db.Text) publisher = db.Column(db.Integer, db.ForeignKey('employee.id'),comment='发布人') class Leave(BaseModel): """假条表""" __tablename__ = 'leave' check_person = db.Column(db.String(32)) # 审核人 check_person_id = db.Column(db.Integer) # 审核人的id leave_time = db.Column(db.Date) # 请假时间 leave_type = db.Column(db.String(32)) # 请假类型 leave_cause = db.Column(db.String(255)) # 请假原因 leave_long = db.Column(db.SmallInteger) # 请假时长 leave_status = db.Column(db.String(16)) # 请假状态 leave_employee = db.Column(db.Integer, db.ForeignKey('employee.id')) # 请假的员工 class Power(BaseModel): """权限表""" __tablename__ = 'power' power_name = db.Column(db.String(32)) # 权限名称 power_obj = db.Column(db.String(32)) # 权限对象 power_description = db.Column(db.Text) # 权限描述 class Salary(BaseModel): """工资表""" __tablename__ = 'salary' give_time = db.Column(db.Date) # 发放时间 actual_amount = db.Column(db.DECIMAL(10,2)) # 实发金额 welfare_deduction = db.Column(db.DECIMAL(10,2)) # 福利扣除 tax_deduction = db.Column(db.DECIMAL(10,2)) # 个税扣除 disc_deduction = db.Column(db.DECIMAL(10,2)) # 违纪扣除 total = db.Column(db.DECIMAL(10,2)) # 总金额 subsidy = db.Column(db.DECIMAL(10,2)) # 补助 awards = db.Column(db.DECIMAL(10,2)) # 年终奖 employee_id = db.Column(db.Integer, db.ForeignKey('employee.id')) # 职位权限关系表 position_power = db.Table( 'position_power',#关系表名 db.Column('position_id',db.Integer, db.ForeignKey('position.id')), db.Column('power_id',db.Integer, db.ForeignKey('power.id')) ) #员工权限关系表 employee_power = db.Table( 'employee_power',#关系表名 db.Column('employee_id',db.Integer,db.ForeignKey('employee.id')), db.Column('power_id',db.Integer,db.ForeignKey('power.id')) )
  • 相关阅读:
    spoj 3273 Treap
    hdu1074 Doing Homework
    hdu1024 Max Sum Plus Plus
    hdu1081 To the Max
    hdu1016 Prime Ring Problem
    hdu4727 The Number Off of FFF
    【判断二分图】C. Catch
    【01染色法判断二分匹配+匈牙利算法求最大匹配】HDU The Accomodation of Students
    【数轴涂色+并查集路径压缩+加速】C. String Reconstruction
    【数轴染色+并查集路径压缩+加速】数轴染色
  • 原文地址:https://www.cnblogs.com/Liu928011/p/14879121.html
Copyright © 2011-2022 走看看