在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
天真地,我希望这个输出是adefault
。当然,输出实际上是None
。即使添加到会话中,它仍然保持None
并且仅在我提交(或刷新)会话时被填充,并从数据库中重新读取实例值。
有没有办法在不将实例刷新到数据库的情况下设置属性默认值?我尝试调查ColumnDefault
文档,似乎没有一种明显的方法来检查类型/ python值,以便在自定义声明性基类中手动设置它。
答案 0 :(得分:12)
在您的类中添加构造函数并在其中设置默认值。从数据库加载行时,构造函数不会运行,因此可以这样做。
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
在SA Docs中有类似方式使用__init__
的例子。