在Flask、SqlAlchemy、Python中创建一个自动知道是插入还是更新的函数



我目前有两段独立的代码,其中一段将一个全新的行插入mySQL数据库。第二个只是更新一行(如果它已经存在(。

我正试图将这两者合并为一个函数,该函数会自动检查id是否在表中,如果是,则会更新,否则会插入新行?这就是我目前所拥有的:

class Example(db.Model):
__tablename__ = 'schools'
_id = db.Column('_id', db.Unicode, primary_key=True)
establishmentNumber = db.Column('establishmentNumber', db.Unicode)
laCode = db.Column('laCode', db.Unicode)
urn = db.Column('urn', db.Unicode)
name = db.Column('name', db.Unicode)
phaseOfEducation = db.Column('phaseOfEducation', db.Unicode)
wondeID = db.Column('wondeID', db.Unicode)
def __init__(self, _id, establishmentNumber, laCode, urn, name, phaseOfEducation, wondeID):
self._id = _id
self.establishmentNumber = establishmentNumber
self.laCode = laCode
self.urn = urn
self.name = name
self.phaseOfEducation = phaseOfEducation
self.wondeID = wondeID
def add_or_update(cls, _id, establishmentNumber, laCode, urn, name, phaseOfEducation, wondeID):
entity = cls.query.filter_by(_id=school._id.iloc[0]).first()
print(entity)
if not entity:
entity = cls(school._id.iloc[0], school.establishmentNumber.iloc[0], school.laCode.iloc[0], school.urn.iloc[0], school.name.iloc[0], school.phaseOfEducation.iloc[0], school.wondeID.iloc[0])
db.session.add(entity)
db.session.commit()
else:
entity.establishmentNumber = 'hello'
db.session.commit()
print (entity.establishmentNumber)
return entity

它不会产生任何错误,但也不会添加或更新。有人看到我做错了什么吗?

您有缩进错误。Reident-like:

def __init__(self, _id, establishmentNumber, laCode, urn, name, phaseOfEducation, wondeID):
self._id = _id
self.establishmentNumber = establishmentNumber
self.laCode = laCode
self.urn = urn
self.name = name
self.phaseOfEducation = phaseOfEducation
self.wondeID = wondeID
@classmethod
def add_or_update(cls, _id, establishmentNumber, laCode, urn, name, phaseOfEducation, wondeID):
entity = cls.query.filter_by(_id=school._id.iloc[0]).first()
print(entity)
if not entity:
entity = cls(school._id.iloc[0], school.establishmentNumber.iloc[0], school.laCode.iloc[0],
school.urn.iloc[0], school.name.iloc[0], school.phaseOfEducation.iloc[0],
school.wondeID.iloc[0])
db.session.add(entity)
db.session.commit()
else:
entity.establishmentNumber = 'hello'
db.session.commit()
print(entity.establishmentNumber)
return entity

最新更新