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

标签 python mysql sqlalchemy flask-sqlalchemy

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

相关文章:

MySQL - 使用表连接过滤的计数查询

mysql - 是否可以添加到 mysql 单元格中的现有值?

mysql - 在 MySQL 查询中使用 CASE 进行多个条件查询

python - 在 SQLAlchemy 查询中使用像 substr(X, Y, Z) 这样的 SQL 函数

python - 使用 SQLAlchemy ORM 将新的一对多数据插入表中

python - 有没有办法将数字添加到列表中元组的第一部分?

Python 请求 : Selecting a form for login

python - 值错误 : cannot reshape array of size 3800 into shape (1, 200)

python - sqlite 中的 Django hstore 字段

python - 如何在 flask-sqlalchemy 中使用反射/自动加载