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

标签 python sqlalchemy

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

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。即使在添加到 session 时,它也保持并且只有在我提交(或刷新) session 并从数据库中重新读取实例值时才会被填充。

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

最佳答案

向您的类添加一个构造函数并在那里设置默认值。当从数据库中加载行时,构造函数不会运行,因此可以这样做。

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__ 的示例.

关于python - 如何在 sqlalchemy 声明中设置属性默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13384996/

相关文章:

python - 如何配置所需参数,同时仍允许特殊参数(如 "--version")?

python - 将 Python 变量传递给 `Tkinter.Tcl().eval()`

python - pyinstaller生成的exe文件不能在别人的电脑上使用

python - sqlalchemy 的查询返回 AttributeError : 'NoneType' object

python - SQLAlchemy 中格式方便的 SELECT

python - Eclipse 与 Webfaction 和 Django

python - 在不运行 `celeryd` 的情况下使用 Django+Celery 进行开发?

postgresql - 如何从 Python RDFLib 加速 SPARQL 查询?

python - sqlalchemy 中的点类型?

Python进程不释放内存