gpt4 book ai didi

python - 覆盖 sqlalchemy 反射表中的默认值

转载 作者:太空宇宙 更新时间:2023-11-04 06:49:37 25 4
gpt4 key购买 nike

我已经反射(reflect)了现有 mysql 数据库中的大量表。我想表达任何表中特定名称的任何列默认为 datetime.now()。然而,天真地遍历表和列并在我发现具有特定名称的表和列上设置默认值是行不通的,在执行 session.add(); 时。 session.flush() 我收到以下错误:

AttributeError: 'builtin_function_or_method' object has no attribute '__visit_name__'

这似乎与调用 _set_parent(以及 sqlalchemy.schema 中第 721 行的 this self._init_items(*toinit))有关。

有谁知道是否有一种方法可以做到这一点,而无需遍历我所有的反射表并在每个地方添加 Column(..) 行,所有这些行都在做同样的事情,或者诉诸于非常丑陋的 hacks?

最佳答案

另一种选择是在反射时覆盖需要默认值的列:

Table('some_table', metadata,
Column('create_time', DateTime, default=datetime.now),
autoload=True)

不幸的是,您目前无法同时反射(reflect)数据类型和设置 SQLAlchemy 端默认值。有人可能会争辩说,数据类型是接口(interface)定义的一部分,因此冗余不会造成维护问题 - 如果列数据类型发生变化,您很可能也需要更改默认值函数。

关于python - 覆盖 sqlalchemy 反射表中的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/939893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com