Flask-Sqlalchemy 为 'unique' 整数取非唯一值
Flask-Sqlalchemy taking non unique values for a 'unique' integer
考虑以下代码:
class User(db.Model):
id=db.Column(db.Integer,primary_key=True)
email=db.Column(db.String,unique=True)
name=db.Column(db.String)
password=db.Column(db.String)
registration_num=db.Column(db.Integer,unique=True)
def __repr__(self):
return "<Name %r>, <id %r>" %(self.name,self.id)
我在这里尝试创建一个具有唯一电子邮件 ID(稍后用作登录 ID)和唯一注册号(稍后用作文件夹名称以保存用户提交的数据)的用户。
虽然电子邮件列拒绝非唯一值,但无论我使用相同注册号创建多少用户,registration_num 都不会引发任何标志。
注册页面使用的装饰器如下:
@app.route('/register', methods=['GET','POST'])
def register():
if request.method == 'POST':
userpass=request.form["password"]
usermail=request.form["username"]
nameofuser=request.form["name"]
reg_num=int(request.form["r_num"])
u=models.User(email=usermail,name=nameofuser,password=userpass,registration_num=reg_num)
db.session.add(u)
db.session.commit()
return redirect(url_for('login'))
return render_template('register_form.html')
我做错了什么?
我假设您在数据库中将 email
声明为 UNIQUE
,而不是 registration_num
。在模型中设置 unique=True
不会自动影响数据库并且 SQLAlchemy 不会检查是否已经有一些行具有该值。 unique=True
它被 create_all
或 sqlalchemy-migrate 使用。
考虑以下代码:
class User(db.Model):
id=db.Column(db.Integer,primary_key=True)
email=db.Column(db.String,unique=True)
name=db.Column(db.String)
password=db.Column(db.String)
registration_num=db.Column(db.Integer,unique=True)
def __repr__(self):
return "<Name %r>, <id %r>" %(self.name,self.id)
我在这里尝试创建一个具有唯一电子邮件 ID(稍后用作登录 ID)和唯一注册号(稍后用作文件夹名称以保存用户提交的数据)的用户。 虽然电子邮件列拒绝非唯一值,但无论我使用相同注册号创建多少用户,registration_num 都不会引发任何标志。
注册页面使用的装饰器如下:
@app.route('/register', methods=['GET','POST'])
def register():
if request.method == 'POST':
userpass=request.form["password"]
usermail=request.form["username"]
nameofuser=request.form["name"]
reg_num=int(request.form["r_num"])
u=models.User(email=usermail,name=nameofuser,password=userpass,registration_num=reg_num)
db.session.add(u)
db.session.commit()
return redirect(url_for('login'))
return render_template('register_form.html')
我做错了什么?
我假设您在数据库中将 email
声明为 UNIQUE
,而不是 registration_num
。在模型中设置 unique=True
不会自动影响数据库并且 SQLAlchemy 不会检查是否已经有一些行具有该值。 unique=True
它被 create_all
或 sqlalchemy-migrate 使用。