检查url名称空间是唯一的最佳方法是什么?

时间:2015-05-19 21:07:29

标签: python-3.x flask sqlalchemy

我试图为我的" 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

1 个答案:

答案 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

另外,我强烈建议您将导入保留在模块的顶部。进口需要一段时间。

相关问题