您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

5b51 2022/1/14 8:20:59 python 字数 3755 阅读 476 来源 www.jb51.cc/python

使用SQLAlchemy,可以为每个函数添加默认值.据我所知,这也可能是一个可调用的(没有任何参数或可选的ExecutionContext参数).现在在一个声明性场景中,我想知道是否有可能有一个默认函数,该函数是使用正在存储的对象调用的.即可能是这样的:Base = sqlalchemy.ext.declarative.declarative_base()

概述

使用sqlAlchemy,可以为每个函数添加认值.据我所知,这也可能是一个调用的(没有任何参数或可选的ExecutionContext参数).

现在在一个声明性场景中,我想知道是否有可能有一个函数,该函数是使用正在存储的对象调用的.即可能是这样的:

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

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

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声明中的基于对象的默认值全部内容,希望文章能够帮你解决python – SQLAlchemy声明中的基于对象的默认值所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶