在SQLAlchemy中定义表时,如何将函数(依赖于其他列的表达式)定义为列的默认值?

时间:2018-01-23 12:37:07

标签: python python-3.x sqlite sqlalchemy flask-sqlalchemy

如何添加一个函数/表达式,它将参数作为其他列作为SQLAlchemy表中的列的默认值?例如:我想将c定义为2 * x(其他列)的列;它应该保存在数据库中(也可以在其他表中)。可以在这种情况下使用@hybrid_property装饰器吗?

from sqlalchemy import Column, Integer
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import Session, aliased
from sqlalchemy.ext.hybrid import hybrid_property, hybrid_method
from sqlalchemy import create_engine
from sqlalchemy import MetaData
from sqlalchemy.orm import sessionmaker


engine = create_engine('sqlite:///Helloworld.db', echo=False)
Session = sessionmaker(bind=engine)
metadata = MetaData(engine)
Base = declarative_base()

class HelloWorld(Base):
    __tablename__ = 'helloworld'
    pm_key = Column(Integer, primary_key=True)
    x = Column(Integer, nullable=False)
    c = Column(Integer,default=2*x)

Base.metadata.create_all(engine)

1 个答案:

答案 0 :(得分:1)

有可能。下面我只是添加一段您可以尝试的代码。我认为this会对您有所帮助。

def mydefault(context):
    return context.current_parameters.get('X')

class HelloWorld(Base):
    __tablename__ = 'helloworld'
    pm_key = Column(Integer, primary_key=True)
    x = Column(Integer, nullable=False)
    c = Column(Integer,default=mydefault)