擅长:python、mysql、java
<p>我建议对丹尼斯接受的答案稍作修改:</p>
<pre><code>for i in range(MAX_ATTEMPTS):
sid = os.urandom(8).decode('hex')
try:
db.execute('INSERT INTO sessions (sid) VALUES (?)', (sid,))
except IntegrityError:
continue
break
else:
raise RuntimeError('Failed to generate unique session ID')
</code></pre>
<p>我们只需尝试插入而不显式地检查生成的ID。insert几乎不会失败,因此我们通常只需要进行一次数据库调用,而不是两次。在</p>
<p>这将通过减少数据库调用来提高效率,而不会损害线程安全性(因为这将由数据库引擎有效地处理)。在</p>