【问题标题】:Writing a composite Key in Flask SQL Alchemy [duplicate]在 Flask SQL Alchemy 中编写复合键 [重复]
【发布时间】:2020-03-20 04:37:51
【问题描述】:

我的桌子如下所示:

class Dummies(db.Model):

    __tablename__ = 'dummies'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(100), index=True, nullable=True)
    value = db.Column(db.String(100), index=True, nullable=True)
    sum_id = db.Column(db.Integer, db.ForeignKey('pattern.id',
                                                      onupdate='CASCADE',
                                                      ondelete='CASCADE'),
                                                      index=True, nullable=False)

我对烧瓶很陌生,并试图绕过这种关系的语法,我想代表。我想使用名称、值和 sum_id 来唯一地表示一行。有人可以帮我写这个关系吗?

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    如果你想对多列强制执行唯一约束,你可以像这样显式设置它:

    
        __tablename__ = 'dummies'
    
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(100), nullable=True)
        value = db.Column(db.String(100), nullable=True)
        sum_id = db.Column(db.Integer, db.ForeignKey('pattern.id'), nullable=False)                                                                                                      
        UniqueConstraint('name', 'value', 'sum_id'
                                     name='myMultipleColumnUniqueConstraint')
    

    这样您可以强制执行多列唯一性约束。也只是想指出 onupdate => refers to a default value for the column. 据我所知,sqlAlchemy 中没有 ondelete。但你可以使用:

      cascade = "all, delete-orphan" ``` 
    on Parent Table relationship to achieve the same effect as ondelete="cascade" as in django. 
    

    类 ParentDummies(db.Model): dummies= relationship("Dummy", cascade="all, delete-orphan")

    
    
    Also, if you are trying make those columns as composite primary key, you can do so like this: 
    ```  class Dummies(db.Model):
    
        __tablename__ = 'dummies'
    
        id = db.Column(db.Integer)
        name = db.Column(db.String(100), nullable=True)
        value = db.Column(db.String(100), nullable=True)
        sum_id = db.Column(db.Integer, db.ForeignKey('pattern.id', nullable=False),
        PrimaryKeyConstrain('name', 'value', 'sum_id', name="myCompositePk")                              
    

    class Dummies(db.Model):
    
        __tablename__ = 'dummies'
    
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        name = db.Column(db.String(100), nullable=True, primary_key=True)
        value = db.Column(db.String(100), nullable=True, primary_key=True)
        sum_id = db.Column(db.Integer, db.ForeignKey('pattern.id'), nullable=False, primary_key=True)                                          
    
    

    【讨论】:

    猜你喜欢
    • 2014-08-24
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2021-10-28
    • 1970-01-01
    相关资源
    最近更新 更多