Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy唯一对象_Python_Mysql_Database_Sqlalchemy - Fatal编程技术网

Python SQLAlchemy唯一对象

Python SQLAlchemy唯一对象,python,mysql,database,sqlalchemy,Python,Mysql,Database,Sqlalchemy,假设我有以下课程: class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) public_key = Column(String(16), nullable=False, unique=True) private_key = Column(String(64), nullable=False, unique=True) 我需要将公钥和私钥都设置为随机字符串

假设我有以下课程:

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    public_key = Column(String(16), nullable=False, unique=True)
    private_key = Column(String(64), nullable=False, unique=True)
我需要将
公钥
私钥
都设置为随机字符串(这不是问题),但我不确定确保这一点的最佳方法

  • 字符串在其他任何地方都不存在
  • 在检查它们的存在和创建对象之间,它们还没有被另一个进程创建

  • 我知道我不可能是第一个遇到这个问题的人,但我还没有找到太多关于这个问题的信息。看来SQLAlchemy实际上并没有强制执行
    unique
    本身,所以我不确定该怎么办。谢谢。

    意识到碰撞的可能性非常、非常、非常低

    假设您的随机字符串仅由大写字母和数字组成。每个角色有36种可能性。公钥的16个字符将为您提供36^16个组合。大约是8,之后是24秒。即使数据库中有一百万个密钥,添加新密钥时发生冲突的可能性为10^-19

    我不会担心的。我没有,而且我使用的随机值(大多数情况下是UUID4)与您的冲突的几率要高得多。(但仍处于天文低点。)


    如果您仍然担心:SQLAlchemy可能不会强制执行
    UNIQUE
    ,但您的DBMS应该这样做,这意味着如果违反了UNIQUE约束,SQLAlchemy将抛出异常。可以捕获异常并优雅地降级。

    谢谢。那么Python的库是否足够?我只是担心随机数生成器会产生碰撞。有更好的图书馆吗?我回答了自己的问题。我生成了10000000个64字节的字符串,没有任何冲突,所以我非常满意。谢谢