gpt4 book ai didi

python - SQLAlchemy如何检查加载的对象属性是否等于列默认值

转载 作者:行者123 更新时间:2023-11-29 06:49:27 25 4
gpt4 key购买 nike

我有一些表类,我将不断向它们添加属性。我想编写一个函数 upToDate() ,如果没有列是 MySQL 默认值,则返回 True ,如果是,则返回 False 。例如,我的表格如下所示:

class League(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128), nullable=False)
numTeams = db.Column(db.Integer, nullable=False)

我加载联赛 ID 1,并且它已经填充了所有值,因此它返回 True。后来,我将联盟更新为如下所示:

class League(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128), nullable=False)
numTeams = db.Column(db.Integer, nullable=False)
firstYear = db.Column(db.Integer, nullable=False)

我运行 migrate() 和 update() 将新列添加到数据库中。现在,当我加载 League id 1 时,firstYear 属性将为 0,这是默认值,这意味着它需要更新。

最佳答案

我在SQLAlchemy文档中找到了inspect()函数,它为我解决了这个问题。

Documentation

def upToDate(tableObject):
defaults = {"INTEGER" : 0, "VARCHAR(128)" : ""} #could enter more data types here as necessary
mapper = inspect(tableObject.__class__)
for col in mapper.columns:
name = col.name
type = str(col.type)
currentValue = tableObject.__getattribute__(name)
if defaults[type] == currentValue:
return False
return True

关于python - SQLAlchemy如何检查加载的对象属性是否等于列默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48069745/

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