当前位置: 首页 > 面试题库 >

为什么在提交对象之前SQLAlchemy默认列值不可用?

陶寒
2023-03-14
问题内容

最近,我发现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

我想在对象实例化之后tmodel_instance.foo立即相等0,但是似乎默认值仅在执行INSERT命令时使用,这确实使我感到困惑。为什么一个宁愿
defaultserver_default?以及如何实现我想要的?我应该在中指定所有默认参数__init__吗?这似乎是代码重复:要更改默认值,我必须将其更改两次并保持这些值相等-
有什么办法可以避免这种情况?


问题答案:

您可以使用force_instant_defaultsfrom的监听器sqlalchemy_utils来更改此行为:

from sqlalchemy_utils import force_instant_defaults

force_instant_defaults()

class TestModel(Base):
    __tablename__ = 'tmodel'
    id = sa.Column(sa.Integer, primary_key=True)
    foo = sa.Column(sa.Integer, default=0)

model = TestModel()
assert model.foo == 0


 类似资料:
  • 问题内容: 如果尝试在表上创建TEXT列,并在MySQL中为其提供默认值,则会收到错误消息(至少在Windows上如此)。我看不到任何原因为何文本列不应具有默认值。MySQL文档未给出任何解释。对我来说似乎不合逻辑(并且有些沮丧,因为我想要一个默认值!)。有人知道为什么不允许这样做吗? 问题答案: Windows MySQL v5引发错误,但Linux和其他版本仅引发警告。这需要解决。 WTF?

  • 本文向大家介绍Python为何不能用可变对象作为默认参数的值,包括了Python为何不能用可变对象作为默认参数的值的使用技巧和注意事项,需要的朋友参考一下 先来看一道题目: 我们似乎发现了一个Bug,每次用相同的方式调用函数 func() 时,返回结果竟然不一样,而且每次返回的列表在不断地变长。 从上面可以看出,函数的返回值其实是同一个列表对象,因为他们的id值是一样的,只不过是列表中的元素在变化

  • 首先,我的声明是: 我的主要活动获取编号和文本: 我的Activity2应该得到数字和文本: 文本很受欢迎,但数值始终为0。

  • 在我的代码中,我有以下行: 在野外,它生活在一个枚举中: 我从sonarqube那里得到以下提及: 使“形状”暂时或可序列化。可序列化类中的字段本身必须是可序列化的或瞬态的,即使该类从未显式序列化或反序列化。这是因为在负载下,大多数J2EE应用程序框架都会将对象刷新到磁盘,而一个据称具有非瞬态、非序列化数据成员的可序列化对象可能会导致程序崩溃,并为攻击者打开大门。 据我所知,int[](和int[

  • 问题内容: 以下代码可以正常工作 但是,如果我将属性的类型更改为常量,则初始化器会出现错误 我做了一点搜索,结果是因为 可选 变量自动具有默认值nil 我猜: 因为一旦设置了常量,就无法对其进行更改,如果自动接收到可选常量,那么它将保持为不可更改,这是非常愚蠢的,并且可能会对用户不利。 问题: 我的大学并不完全相信这个猜测,他告诉我一定有更多的理由。如果有人可以向我解释,我将不胜感激 谢谢 问题答

  • 问题内容: SQLAlchemy正在生成但未启用Postgresql中列的序列。我怀疑我在引擎设置中可能做错了什么。 使用SQLAlchemy教程(http://docs.sqlalchemy.org/en/rel_0_9/orm/tutorial.html)中的示例: 使用此脚本,将生成下表: 然而,序列 被 创建: SQLAlchemy 0.9.1,Python 2.7.5 +,Postgre