相关疑难解决方法(0)

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

最近我发现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__吗?这似乎是代码重复:更改默认值我必须将其更改两次并保持这些值相等 - 是否有某种方法可以避免这种情况?

python sqlalchemy default-value

28
推荐指数
3
解决办法
6537
查看次数

如何在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值,以便在自定义声明性基类中手动设置它.

python sqlalchemy

11
推荐指数
1
解决办法
7674
查看次数

SQLAlchemy:默认值的输出为无

我正在使用 Flask 和 SQLAlchemy 制作一个网络应用程序。而我想要做的是在 web.xml 中提取默认值。但输出变为无。柱子是这样的。

n = db.Column(db.Integer, default=0)
Run Code Online (Sandbox Code Playgroud)

我也试过server_default='0'server_default=text('0')但这些输出也是无。我怎样才能解决这个问题?

python sqlalchemy

3
推荐指数
1
解决办法
1068
查看次数

标签 统计

python ×3

sqlalchemy ×3

default-value ×1