【问题标题】:Python Flask Insert data into MySQLPython Flask 将数据插入 MySQL
【发布时间】:2016-04-21 18:23:36
【问题描述】:

我有这样的注册表:

<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))

这里的问题是它执行到插入语句上面的打印语句它没有显示任何错误但没有插入数据。我哪里错了。请考虑一下我是 Flask 的新手。在此先感谢:)

【问题讨论】:

  • print "Registered" 语句执行了吗?
  • 不,这就是问题所在。也许插入有错误..所以它跳过了其余的代码

标签: mysql flask


【解决方案1】:

您的insert 已完成,但您没有commit 将您的数据写入数据库。因此,在您的会话结束后,它会回滚。

根据 MySQL 的事务隔离策略,它可能永远不会对其他程序或事务可见。

【讨论】:

    【解决方案2】:

    以下语法有效: "插入login(u_id, fname, lname, username, password, email, question, answer) 值 (',%s,% %s,%s,%s,%s,%s)"

    【讨论】:

      【解决方案3】:

      查看查询,我注意到:

      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 个值。

      【讨论】:

      • @NavyaVaishnavi 更新了上面的回复。
      • 不应该是connection.commit()而不是cur.commit()吗?
      • @amiawizard OP 在其代码中的游标变量是cur
      • 是的,但是应该提交的连接不是光标?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      相关资源
      最近更新 更多