加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 设置关系表的server_default值

发布时间:2020-12-13 15:55:16 所属栏目:百科 来源:网络整理
导读:我有两个管理员和角色表,与第三个表分配(多对多关系)连接,字段为role_id,administrator_id和一些额外的字段created_at和updated_at,我想自动填充: assignments = db.Table('assignments',db.Column('role_id',db.Integer,db.ForeignKey('roles.id')),db.Col
我有两个管理员和角色表,与第三个表分配(多对多关系)连接,字段为role_id,administrator_id和一些额外的字段created_at和updated_at,我想自动填充:

assignments = db.Table('assignments',db.Column('role_id',db.Integer,db.ForeignKey('roles.id')),db.Column('administrator_id',db.ForeignKey('administrators.id')),db.Column('created_at',db.DateTime,server_default=db.func.now()),db.Column('updated_at',server_default=db.func.now(),onupdate=db.func.now()),db.ForeignKeyConstraint(['administrator_id'],['administrators.id']),db.ForeignKeyConstraint(['role_id'],['roles.id'])
)

class Administrator(db.Model,UserMixin):
    __tablename__ = 'administrators'

    id = Column(Integer,primary_key=True,server_default=text("nextval('administrators_id_seq'::regclass)"))
    email = Column(String(255),nullable=False,unique=True,server_default=text("''::character varying"))
    name = Column(String(255))
    surname = Column(String(255))

    roles = db.relationship('Role',secondary=assignments,backref=db.backref('users',lazy='dynamic'))


class Role(db.Model):
    __tablename__ = 'roles'

    id = Column(Integer,server_default=text("nextval('roles_id_seq'::regclass)"))
    name = Column(String(255))

但是当我将一个角色分配给管理员时

admin.roles = [role1]
db.session.add(admin)
db.session.commit()

它打破了以下错误:

IntegrityError: (psycopg2.IntegrityError) null value in column "created_at" violates not-null constraint
DETAIL:  Failing row contains (1265,19,3,null,null).
[SQL: 'INSERT INTO assignments (role_id,administrator_id) VALUES (%(role_id)s,%(administrator_id)s)'] [parameters: {'administrator_id': 19,'role_id': 3}]

有没有办法在赋值表中为created_at和updated_at字段设置默认值?

解决方法

它使用default和onupdate参数而不是server_default和server_onupdate:

db.Column('created_at',default=db.func.now()),default=db.func.now(),

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读