2012-08-28 41 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违规。 –

回答

相关问题