首页 > 解决方案 > sqlalchemy.exc.DataError:(pymysql.err.DataError)(1406,“第 1 行的列‘密码’的数据太长”)

问题描述

def create_user(db: Session, user: UserCreate):
    hashed_password= bcrypt.hashpw(user.password.encode('utf-8'), bcrypt.gensalt())
    db_user= User(email=user.email, password=hashed_password, lname=user.lname, fname=user.fname)
    print('---->', db_user)
    db.add(db_user)
    db.commit()
    return db_user

@app.post('/api/users', response_model= User)
def signup(user_data: UserCreate, db: Session= Depends(get_db)):
    user= get_user_by_email(db, user_data.email)
    if user:
        raise HTTPException(status_code=409,
                                detail="Email already registered")
    signedup_user = create_user(db, user_data)
    print("--------->", signedup_user)
    return signedup_user

sqlalchemy.exc.DataError: (pymysql.err.DataError) (1406, "Data too long for column 'password' at row 1") [SQL: INSERT INTO users (lname, fname, email, password) VALUES (%(lname )s, %(fname)s, %(email)s, %(password)s)] [参数:{'lname': 'stsdf', 'fname': 'swef', 'email': 'didou@gmail .com', 'password': b'$2b$12$nui9RJwoVkU.h6d9ASw6POLZhbn83YrwGKpsNvp.GlnsDa7X4VIqS'}](此错误的背景:http ://sqlalche.me/e/13/9h9h )

标签: pythonsqlalchemyfastapi

解决方案


包含此错误中涉及的任何代码是一个很好的做法。

但是,这行代码

hashed_password= bcrypt.hashpw(user.password.encode('utf-8'), bcrypt.gensalt())

生成的字符串(哈希)比您的模型可以容纳的更长。

您为密码属性指定的大小对于该哈希来说不够大。


推荐阅读