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字节的字符串,没有任何冲突,所以我非常满意。谢谢