最近我发现SQLAlchemy的Column默认不起作用,因为我期望它:
>>> Base = declarative_base()
>>> class TestModel(Base):
... __tablename__ = 'tmodel'
... id = sa.Column(sa.Integer, primary_key=True)
... foo = sa.Column(sa.Integer, default=0)
...
>>> tmodel_instance = TestModel()
>>> print tmodel_instance.foo
None
>>> session.add(tmodel_instance)
>>> print tmodel_instance.foo
None
>>> session.commit()
>>> print tmodel_instance.foo
0
Run Code Online (Sandbox Code Playgroud)
我希望在对象实例化之后tmodel_instance.foo立即相等0,但似乎默认值仅在执行INSERT命令时使用,它确实让我感到困惑.为什么一个人更喜欢 default结束server_default?我如何实现我想要的目标?我应该指定所有默认参数__init__吗?这似乎是代码重复:更改默认值我必须将其更改两次并保持这些值相等 - 是否有某种方法可以避免这种情况?
在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值,以便在自定义声明性基类中手动设置它.
我正在使用 Flask 和 SQLAlchemy 制作一个网络应用程序。而我想要做的是在 web.xml 中提取默认值。但输出变为无。柱子是这样的。
n = db.Column(db.Integer, default=0)
Run Code Online (Sandbox Code Playgroud)
我也试过server_default='0',server_default=text('0')但这些输出也是无。我怎样才能解决这个问题?