sqlalchemy如何检查加载的对象属性是否等于默认列

vwoqyblh  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(319)

我有一些表类,我将不断添加属性。我想编写一个函数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)

我加载league id 1,它已经填充了所有的值,所以它返回true。稍后,我更新了league,如下所示:

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()将新列添加到数据库中。现在,当我加载联赛id 1时,firstyear属性将是0,这是默认值,这意味着它需要更新。

jm2pwxwz

jm2pwxwz1#

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

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

相关问题