Python SQLAlchemy如何检查加载的对象属性是否等于列默认值
我有一些表类,我将不断地向其中添加属性。我想编写一个函数upToDate(),如果所有列都不是MySQL默认值,它将返回True,如果是,则返回False。例如,我的表格如下所示: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
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