Python将数据插入MySQL
我有一张这样的登记表:Python将数据插入MySQL,mysql,flask,Mysql,Flask,我有一张这样的登记表: <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="lnam
<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>
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语句。它没有显示任何错误,但没有插入数据。我哪里做错了。请考虑这是新的烧瓶。提前感谢:)查看查询,我注意到:
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个值。您的
插入
完成,但您没有将数据提交到数据库。因此,会话结束后,它将回滚
根据MySQL的事务隔离策略,它可能永远不会对其他程序或事务可见。以下语法起作用:
“插入login
(u\u id
,fname
,lname
,username
,password
,email
,问题
,答案
)值(“,%s,%s,%s,%s,%s,%s)”是否执行了打印“已注册”
语句?不,这就是问题所在。可能insert中有错误。因此它将跳过code@NavyaVaishnavi更新了上面的回复。应该是connection.commit()而不是cur.commit()?@amiawizard光标变量OP在其代码中是cur
。是的,但应该提交的连接不是光标?