Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy如何检查加载的对象属性是否等于列默认值_Python_Mysql_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

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

Python SQLAlchemy如何检查加载的对象属性是否等于列默认值,python,mysql,sqlalchemy,flask-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.Integ

我有一些表类,我将不断地向其中添加属性。我想编写一个函数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。稍后,我更新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,这是默认值,这意味着它需要更新。

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

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


什么是
col.default.arg
?;)我想我没抓住你问题的重点。在我的问题或答案中,
col.default.arg
在哪里?它不是,通过这种方式,您可以访问默认值(而不是在您的
defaults
字典中硬编码默认值)。经过思考,如果您在模型定义中使用default=0,
col.default.arg
?;)我想我没抓住你问题的重点。在我的问题或答案中,
col.default.arg
在哪里?它不是,通过这种方式,您可以访问默认值(而不是在
defaults
字典中硬编码默认值)。经过思考,如果您在模型定义中使用default=0,这将起作用
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