在db中,我有一个名为register的表,它有mail-id作为主键。我曾经使用session.add_all()
批量提交。但有时候一些记录已经存在;在这种情况下,我想分离已存在的记录和不存在的记录。
答案 0 :(得分:2)
http://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.merge
如果要添加到数据库的所有对象都已完成(例如,新对象至少包含数据库中记录的所有信息),则可以使用Session.merge()
。有效merge()
将创建或更新现有行(通过查找主键(如果它存在于会话/数据库中并从您合并的对象复制状态)。需要注意的关键是,传递给merge的对象的属性值将覆盖数据库中已存在的属性值。
我认为这在性能方面并不是那么好,所以如果这很重要,SQLAlchemy有一些批量操作。您需要检查将要添加/更新的主键集的存在性,并为不存在的对象执行一次批量插入,并对已执行的对象执行一次批量更新。如果需要采用高性能方法,文档中有一些关于批量操作的信息。
http://docs.sqlalchemy.org/en/latest/orm/persistence_techniques.html#bulk-operations
答案 1 :(得分:-1)
用户SQL ALchemys检查器:
inspector = inspect(engine)
inspector.get_primary_keys(table, schema)
Inspector“反映”所有主键,您可以检查返回的列表。