如何在sqlalchemy声明中设置属性默认值?

mis*_*mer 11 python sqlalchemy

在SQLAlchemy Declarative中,如何为列设置默认值,以便瞬态或挂起的对象实例具有这些默认值?一个简短的例子:

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class A(Base):
  __tablename__ = "A"
  id = Column(Integer, primary_key=True)
  word = Column(String, default="adefault")

a = A()
print a.word
Run Code Online (Sandbox Code Playgroud)

天真的,我希望这个输出是adefault.当然,输出实际上是None.即使在添加到会话时,它仍会保留None并且仅在我提交(或刷新)会话时被填充,并从数据库中重新读取实例值.

有没有办法在不将实例刷新到数据库的情况下设置属性默认值?我尝试调查ColumnDefault文档,似乎没有一种明显的方法来检查类型/ python值,以便在自定义声明性基类中手动设置它.

Ton*_*bbs 13

在类中添加构造函数并在其中设置默认值.从数据库加载行时,构造函数不会运行,因此可以执行此操作.

class A(Base):
    __tablename__ = "A"
    id = Column(Integer, primary_key=True)
    word = Column(String)

    def __init__(self):
        self.word = "adefault"

a = A()
print a.word
Run Code Online (Sandbox Code Playgroud)

__init__SA Docs中有类似方式的使用示例.

  • 答案对我来说似乎根本不起作用.它打印无,从不调用__init__. (2认同)