gpt4 book ai didi

python - SQLAlchemy 声明中基于对象的默认值

转载 作者:太空狗 更新时间:2023-10-30 01:16:50 25 4
gpt4 key购买 nike

使用 SQLAlchemy,可以为每个函数添加默认值。据我了解,这也可能是可调用的(不带任何参数或带有可选的 ExecutionContext 参数)。

现在在声明性场景中,我想知道是否有可能以某种方式使用正在存储的对象 调用的默认函数。 IE。可能是这样的:

Base = sqlalchemy.ext.declarative.declarative_base()
class BaseEntity(Base):
value = Column('value', String(40), default=BaseEntity.gen_default)

def gen_default(self):
# do something with self, for example
# generate a default value using some other data
# attached to the object
return self.default_value

这样的事情可能吗?或者我是否必须以某种方式为此设置一个插入前 Hook (如何?)?

最佳答案

before_insert 记录在此处:

http://docs.sqlalchemy.org/en/rel_0_7/orm/events.html#sqlalchemy.orm.events.MapperEvents.before_insert

这里的例子:

http://docs.sqlalchemy.org/en/rel_0_7/orm/events.html#mapper-events

from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import event

Base= declarative_base()

class A(Base):
__tablename__ = "a"


id = Column(Integer, primary_key=True)
data = Column(String)
otherdata = Column(String)

@event.listens_for(A, "before_insert")
def gen_default(mapper, connection, instance):
instance.data = "Some default %s" % instance.otherdata

e = create_engine("sqlite://")
Base.metadata.create_all(e)

a = A(otherdata="some other data")
s = Session(e)
s.add(a)
s.commit()

assert a.data == "Some default some other data"

关于python - SQLAlchemy 声明中基于对象的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10599376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com