2012-08-28 70 views
20

我在尋找最快的方法來創建一個新的SQLAlchemy對象,但前提是它尚未存在於數據庫中。創建新對象的最快方法(僅當它不存在時)(SQLAlchemy)

我現在這樣做的方式是首先獲取查詢的計數,看它是否存在,如果不存在,那麼我創建它。 EG:

if not User.query.filter(email=user.email).count(): 
    db.session.add(user) 
    db.session.commit() 

這是最好的方法嗎?會喜歡一些反饋。謝謝!

+1

您應該閱讀這篇dezpez文章,以瞭解這些更新或插入if-not存在的作業中有些可能會有多複雜:http://www.depesz.com/2012/06/10/why-up-up-so-complicated/ –

+1

至於速度:你所做的每件事都必須做一次往返數據庫。我懷疑你會看到你正在做的事情和說'EXISTS'查詢有很大的區別。大的時間成本是三次往返(一個'SELECT',一個'INSERT',一個'COMMIT'),而不是查詢本身。如果你想要速度,你需要批量處理更大的查詢,在事務中做更多的工作,並儘可能使用服務器端的功能。 –

+1

表中記錄的存在頻率如何? 50/50? 80/20?如果大部分時間記錄不存在,您可以插入它並捕獲奇數的UQ違規。 –

回答

相關問題