1
我試圖爲我的「頁面」網頁生成一個唯一的名稱空間(「7FH98T」)。起初我正在考慮生成一個名稱空間,然後查詢數據庫以檢查名稱空間不存在,但我想如果有500,000個頁面,那麼每次創建新頁面時查詢所有名稱空間效率都不高。檢查url命名空間是否唯一的最佳方法是什麼?
我知道我可以運行db.session.commit(),如果有一個異常只是回滾並生成一個新的名稱空間,但我寧願處理generate_namespace()函數內的檢查唯一性。
這是我的代碼。我希望我解釋清楚我正在努力做什麼。提前致謝。
class Page(db.Model):
__tablename__ = 'pages'
id = db.Column(db.Integer, primary_key=True)
namespace = db.Column(db.String(6), unique=True)
@staticmethod
def generate_namespace():
import random
import string
while unique == False:
namespace = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
p = Page.query.filter_by(namespace=namespace).first()
if not p: # Is this really the best way to do this?
continue
else:
unique = True
return namespace
至少根據您在代碼中的評論,這是做到這一點的最佳方式。 – nathancahill
只要重複查詢(儘管每頁不止一次查詢的機會是天文數字),請在命名空間列上創建一個「哈希」或「btree」索引。 – nathancahill