如何只保存数据库中那些不在数据库中的记录呢?

时间:2017-01-18 15:55:43

标签: sqlite python-3.x flask sqlalchemy

我正在使用flask,我开始将SQLalchemy用于我的数据库。我有一个很大的字典列表:

data = [{'id': '3242342342', 'name': 'sfsdfs fsdcd'},
        {'id': '2131231221', 'name': 'sfsddddfs fsdcd'},
        {'id': '3434343544', 'name': 'sfsfdgfddfs fsdcd'},
        {'id': '5465443545', 'name': 'sfsiiiiiiidfs fsdcd'}]

我有一个这样的课:

class Record(db.Model):
    id = db.Column(db.String(20), primary_key=True)
    name = db.Column(db.String(50))

我的任务是处理来自data的所有记录,如果它们不在数据库中,则添加它们并更新它们。这样做的正确方法是什么? 感谢

2 个答案:

答案 0 :(得分:2)

合并功能就是你想要的。

http://docs.sqlalchemy.org/en/latest/orm/session_state_management.html#unitofwork-merging

for elem in data:
  tmp = Record(id=elem['id'], name=['name'])
  session.merge(tmp)

当然晚些时候提交。

答案 1 :(得分:0)

您可以使用for循环迭代数据,但我不确定它是否是最佳方式:

for elem in data:
    for id, name in elem.items():
        record = Record.query.get(id)
        if record:    
            record.id = id
            record.name = name
        else:
            record = Record(id=id, name=name)
        session.add(record)