Python Flask将数据插入MySQL

时间:2016-02-03 09:23:55

标签: 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="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的新手。在此先感谢:)

3 个答案:

答案 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_idfnamelnameusernamepasswordemailquestionanswer)VALUES('',%s,%s,%s,%s,%s,%s,%s)“