Reputation: 372
Consider the following code:
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)
Here I am trying to create a user with unique email id (later to be used as login id) and unique registration number (later to be used as folder name to save user submitted data). While email column rejects non unique values, registration_num does not raise any flag no matter how many users i create with same registration number.
Given below is the decorator used for registration page:
@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')
What am i doing wrong here?
Upvotes: 1
Views: 1625
Reputation: 6861
I suppose you declared email
as UNIQUE
in the database, but not registration_num
. Setting unique=True
in the model does not automatically influence the database and SQLAlchemy does not check if there are some rows with that value already. unique=True
it is used by create_all
or sqlalchemy-migrate.
Upvotes: 3