SQLAlchemy set default value of one column to that of another column

前端 未结 2 1355
傲寒
傲寒 2020-12-10 11:40

I am trying to write a class for substances which has a name filed (for the name, as commonly used in the lab) and another column for the long name (in case the name is actu

相关标签:
2条回答
  • 2020-12-10 12:25

    You can create context-sensitive default function

    def mydefault(context):
        return context.get_current_parameters()['name']
    
    class Substance(Base):
        __tablename__ = "substances"
        id = Column(Integer, primary_key=True)
        code = Column(String, unique=True)
        name = Column(String, unique=True)
        long_name = Column(String, unique=True, default=mydefault)
    
    0 讨论(0)
  • 2020-12-10 12:31

    In addition to r-m-n's answer if you have more than one column that defaults to value of another one, you can write a helper function to avoid writing many default functions.

    def same_as(column_name):
        def default_function(context):
            return context.current_parameters.get(column_name)
        return default_function
    
    # or as a one-liner
    same_as = lambda col: lambda ctx: ctx.current_parameters.get(col)
    
    class Substance(Base):
        __tablename__ = "substances"
        id = Column(Integer, primary_key=True)
        name = Column(String, unique=True)
        long_name = Column(String, unique=True, default=same_as('name'))
        created = Column(DateTime, default=datetime.now)
        edited = Column(DateTime, default=same_as('created'))
    
    0 讨论(0)
提交回复
热议问题