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

标签 python mysql flask-sqlalchemy

我目前有两个独立的代码部分,其中一个将全新的行插入到 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

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

最佳答案

您有缩进错误。驻留如:

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

关于python - 在 Flask、SqlAlchemy、Python 中创建一个自动知道是否插入或更新的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60319286/

相关文章:

python - sklearn异常错误: fitfailed warning from GridSearchCV in tensorflow

php - 如何在 PHP PDO 中插入空字符串而不是 null

mysql - 如何使用 laravel 和 Visual Studio 代码自动生成虚拟数据

python - Flask ReSTLess 属性错误 : 'NoneType' object has no attribute '_sa_instance_state'

python - Flask Security——检查用户有哪些角色

python - Flask-SQLAlchemy 插入多个字典

Python X轴最近点

python - 此条件的 Pandas DataFrame 样式

python - 如何编写 pep8 配置(pep8.rc)文件?

mysql - 在 Sequelize 中创建主键和外键关系