20
我在尋找最快的方法來創建一個新的SQLAlchemy對象,但前提是它尚未存在於數據庫中。創建新對象的最快方法(僅當它不存在時)(SQLAlchemy)
我現在這樣做的方式是首先獲取查詢的計數,看它是否存在,如果不存在,那麼我創建它。 EG:
if not User.query.filter(email=user.email).count():
db.session.add(user)
db.session.commit()
這是最好的方法嗎?會喜歡一些反饋。謝謝!
您應該閱讀這篇dezpez文章,以瞭解這些更新或插入if-not存在的作業中有些可能會有多複雜:http://www.depesz.com/2012/06/10/why-up-up-so-complicated/ –
至於速度:你所做的每件事都必須做一次往返數據庫。我懷疑你會看到你正在做的事情和說'EXISTS'查詢有很大的區別。大的時間成本是三次往返(一個'SELECT',一個'INSERT',一個'COMMIT'),而不是查詢本身。如果你想要速度,你需要批量處理更大的查詢,在事務中做更多的工作,並儘可能使用服務器端的功能。 –
表中記錄的存在頻率如何? 50/50? 80/20?如果大部分時間記錄不存在,您可以插入它並捕獲奇數的UQ違規。 –