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
。是的,但应该提交的连接不是光标?