我试图为我的" Page"生成一个独特的命名空间(" 7FH98T")。网页 。起初我正在考虑生成一个命名空间,然后查询数据库以检查命名空间是否不存在但是我想是否有500&000; 000页面,然后每次创建新页面时查询所有命名空间都不会非常有效率。
我意识到我可以运行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
答案 0 :(得分:1)
If you need a unique identifier then one solution is to generate a UUID
import uuid
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():
namespace = uuid.uuid4() # Will produce a unique to the world identifier.
return namespace
另外,我强烈建议您将导入保留在模块的顶部。进口需要一段时间。