我有这样的注册表格:
<form action="{{url_for('app.register')}}" method="post">
<input type="text" placeholder="First Name" name="fname" required/><br><br>
<input type="text" placeholder="Last Name" name="lname" required/><br><br>
<input type="text" placeholder="username" name="user" required/><br>
<input type="password" placeholder="password" name="password" required/><br>
<input type="password" placeholder="confirm password" name="cpassword" required/><br><br>
<input type="text" placeholder="Email" name="email" required/><br><br>
<select id="soflow" name="selection" required >
<option value = "Default">Select a Security Question</option>
<option value = "What is your first school">What is your first school?</option>
<option value = "What is the name of your first pet">What is the name of your first pet?</option>
<option value = "What is your first car">What is your first car?</option>
</select><br><br>
<input type="text" placeholder="Security Answer" name="answer" required/><br>
<input type="submit" value="Sign Up">
</form>
我的python代码检索数据并将数据插入到数据库中:
db = MySQLdb.connect(host="localhost", user="root", passwd="", db="osn")
cur = db.cursor()
@blueprint.route('/register/', methods=['GET', 'POST'])
def register():
adduser()
return render_template('reg.html')
@blueprint.route('/adduser/', methods=['GET', 'POST'])
def adduser():
print("Entered")
try:
fname = request.form['fname']
lname = request.form['lname']
password = request.form['password']
username = request.form['user']
cpassword = request.form['cpassword']
email = request.form['email']
selection = request.form['selection']
answer = request.form['answer']
print fname,lname,password,username,cpassword,email,selection,answer
cur.execute("INSERT INTO 'login'('fname','lname','username','password','email','question','answer') VALUES (%s,%s,%s,%s,%s,%s,%s,%s)",(fname,lname,username,password,cpassword,email,selection,answer))
print "Registered"
except Exception as e:
return(str(e))
这里的问题是它执行上面的insert语句上面的print语句它没有显示任何错误但是没有插入数据。我哪里出错了。请考虑我是Flask的新手。在此先感谢:)
答案 0 :(得分:1)
查看查询,我注意到:
INSERT INTO
'login'('fname',
'lname',
'username',
'password',
'email',
'question',
'answer')
VALUES (%s,
%s,
%s,
%s,
%s,
%s,
%s,
%s)
您将表名称和列名称作为字符串(引用单撇号)。相反,它们应该显示为封闭,或者应该封闭在反引号内:(`)。
使用python mysql库,您必须使用游标提交更改:
cur.execute(
"""INSERT INTO
login (
fname,
lname,
username,
password,
email,
question,
answer)
VALUES (%s,%s,%s,%s,%s,%s,%s,%s)""", (fname, lname, username, password, cpassword, email, selection, answer))
db.commit()
print "Registered"
此外,您已定义7列以插入数据,而您传递的是8个值。
答案 1 :(得分:1)
您的insert
已完成,但您没有commit
您的数据到数据库。所以在你的会话结束后,它会被回滚。
根据MySQL的事务隔离策略,它可能永远不会对其他程序或事务可见。
答案 2 :(得分:1)
以下语法有效:
“插入login
u_id
,fname
,lname
,username
,password
,email
,question
,answer
)VALUES('',%s,%s,%s,%s,%s,%s,%s)“