2 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
我取決于你使用的后端。
PostgreSQL有一個(gè)很棒的INSERT() ON CONFLICT DO NOTHING
子句,您可以將其與 SQLAlchemy 一起使用:
from?sqlalchemy.dialects.postgresql?import?insert session.execute(insert(MyTable) ????????????????.values(my_entries) ????????????????.on_conflict_do_nothing())
MySQL有類似的INSERT IGNORE
條款,但 SQLAlchemy 對(duì)它的支持較少。
session.execute(MyTable.__table__ ????????????????.insert() ????????????????.prefix_with('IGNORE') ????????????????.values(my_entries))
唯一的事情是my_entries
需要一個(gè)列到值映射的列表。這意味著[{ 'id': 1, 'name': 'Ringo' }, { 'id': 2, 'name': 'Paul' }, ...]
等等。

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
我找到的解決方案是在添加之前查詢數(shù)據(jù)庫(kù)
try:
instance = session.query(InstancesTable).filter_by(id=entry.id).first()
if instance:
return
session.add(entry)
session.commit()
except:
logger.error(f"Error! Rolling back")
session.rollback()
raise
添加回答
舉報(bào)