【问题标题】:My approach for avoiding multiple flask-sqlalchemy db entries我避免多个flask-sqlalchemy db条目的方法
【发布时间】:2018-08-10 14:08:14
【问题描述】:

我的 Flask 应用程序读取基于时间的 CSV 观察日志文件,其中添加了新条目。我旨在避免重复的方法是在添加记录之前收集变量并进行测试,如下所示:

        sl = db.session.query(DesignObservation).filter_by(worker_id = worker_id).filter_by(design_id = design_id).filter_by(ob_date = ob_date)

        if len(sl.all()):
            pass
        else:
            db.session.add(observation_record)
            db.session.commit()

不确定为什么此模式不添加记录。如果我放弃测试,记录会添加,但后续运行会添加重复。

【问题讨论】:

    标签: python flask-sqlalchemy


    【解决方案1】:

    您应该在要写入的表上设置 UNIQUE 约束。然后,数据库引擎将为您管理唯一性。

    您将不得不处理即将出现的“UNIQUE 约束失败”异常...

    【讨论】:

    【解决方案2】:

    我最终做的是将 design_id 与 ob_date 配对以确定唯一性,然后使用下面的函数检查以返回一个布尔值,以确定要添加的记录是否唯一。

    import parser.parse as date_parse
    
    def check_4_obs_dups(design_id, ob_date):
        # returns bool
        r = DesignObservation.query.filter_by(design_id=design_id).all()
        # convert date strings stored in SQLite to datetime 
        s = [date_parse(x.ob_date) for x in r]
    
        return date_parse(ob_date) in s
    

    然后在遍历 CSV 文件的每一行时,我会使用这个循环检查唯一性:

    if not check_4_obs_dups(design_id, ob_date):
        db.session.add(observation_record 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 1970-01-01
      相关资源
      最近更新 更多