Rumah  >  Soal Jawab  >  teks badan

python - Flask写的注册页面,当注册时,如果填写数据库里有的相同数据,就报错

Flask写的注册页面,当注册时,如果填写数据库里有的相同数据,就报错

想知道如何解决

注册路由代码

注册页面代码

报错

E:\Python\Python35-32\lib\site-packages\pymysql\cursors.py:166: Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'VARIABLE_VALUE' at row 479")
  result = self._query(query)
127.0.0.1 - - [21/Feb/2017 09:17:37] "POST /register HTTP/1.1" 200 -
Debugging middleware caught exception in streamed response at a point where response headers were already sent.
Traceback (most recent call last):
  File "E:\Python\Python35-32\lib\site-packages\flask\app.py", line 2000, in __call__
    return self.wsgi_app(environ, start_response)
  File "E:\Python\Python35-32\lib\site-packages\flask\app.py", line 1996, in wsgi_app
    ctx.auto_pop(error)
  File "E:\Python\Python35-32\lib\site-packages\flask\ctx.py", line 387, in auto_pop
    self.pop(exc)
  File "E:\Python\Python35-32\lib\site-packages\flask\ctx.py", line 376, in pop
    app_ctx.pop(exc)
  File "E:\Python\Python35-32\lib\site-packages\flask\ctx.py", line 189, in pop
    self.app.do_teardown_appcontext(exc)
  File "E:\Python\Python35-32\lib\site-packages\flask\app.py", line 1898, in do_teardown_appcontext
    func(exc)
  File "E:\Python\Python35-32\lib\site-packages\flask_sqlalchemy\__init__.py", line 822, in shutdown_session
    self.session.commit()
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\orm\scoping.py", line 157, in do
    return getattr(self.registry(), name)(*args, **kwargs)
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\orm\session.py", line 874, in commit
    self.transaction.commit()
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\orm\session.py", line 461, in commit
    self._prepare_impl()
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\orm\session.py", line 441, in _prepare_impl
    self.session.flush()
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\orm\session.py", line 2139, in flush
    self._flush(objects)
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\orm\session.py", line 2259, in _flush
    transaction.rollback(_capture_exception=True)
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\util\langhelpers.py", line 60, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\util\compat.py", line 187, in reraise
    raise value
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\orm\session.py", line 2223, in _flush
    flush_context.execute()
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\orm\unitofwork.py", line 389, in execute
    rec.execute(self)
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\orm\unitofwork.py", line 548, in execute
    uow
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\orm\persistence.py", line 181, in save_obj
    mapper, table, insert)
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\orm\persistence.py", line 835, in _emit_insert_statements
    execute(statement, params)
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\engine\base.py", line 945, in execute
    return meth(self, multiparams, params)
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\sql\elements.py", line 263, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\engine\base.py", line 1053, in _execute_clauseelement
    compiled_sql, distilled_params
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\engine\base.py", line 1189, in _execute_context
    context)
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\engine\base.py", line 1393, in _handle_dbapi_exception
    exc_info
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\util\compat.py", line 203, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\util\compat.py", line 186, in reraise
    raise value.with_traceback(tb)
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\engine\base.py", line 1182, in _execute_context
    context)
  File "E:\Python\Python35-32\lib\site-packages\sqlalchemy\engine\default.py", line 470, in do_execute
    cursor.execute(statement, parameters)
  File "E:\Python\Python35-32\lib\site-packages\pymysql\cursors.py", line 166, in execute
    result = self._query(query)
  File "E:\Python\Python35-32\lib\site-packages\pymysql\cursors.py", line 322, in _query
    conn.query(q)
  File "E:\Python\Python35-32\lib\site-packages\pymysql\connections.py", line 835, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "E:\Python\Python35-32\lib\site-packages\pymysql\connections.py", line 1019, in _read_query_result
    result.read()
  File "E:\Python\Python35-32\lib\site-packages\pymysql\connections.py", line 1302, in read
    first_packet = self.connection._read_packet()
  File "E:\Python\Python35-32\lib\site-packages\pymysql\connections.py", line 981, in _read_packet
    packet.check_error()
  File "E:\Python\Python35-32\lib\site-packages\pymysql\connections.py", line 393, in check_error
    err.raise_mysql_exception(self._data)
  File "E:\Python\Python35-32\lib\site-packages\pymysql\err.py", line 107, in raise_mysql_exception
    raise errorclass(errno, errval)
sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1062, "Duplicate entry '123' for key 'ix_users_username'") [SQL: 'INSERT INTO users (username, password) VALUES (%(username)s, %(password)s)'] [parameters: {'username': '123', 'password': '123'}]
127.0.0.1 - - [21/Feb/2017 09:17:42] "POST /register HTTP/1.1" 200 -
迷茫迷茫2740 hari yang lalu1400

membalas semua(5)saya akan balas

  • 黄舟

    黄舟2017-04-18 10:23:08

    Anda harus menyemak dahulu sama ada pengguna telah didaftarkan, kemudian db.session.add(). Jika anda mesti mengemas kini kunci utama atau rekod unik, anda boleh mencuba db.session.merge(). Sebenarnya, apa yang dilaksanakan ialah pilih+kemas kini

    balas
    0
  • PHPz

    PHPz2017-04-18 10:23:08

    sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1062, "Entri pendua '123' untuk kunci 'ix_users_username'") [SQL: 'MASUKKAN KE DALAM pengguna (nama pengguna, kata laluan) NILAI (%(nama pengguna) s, %(kata laluan)s)'] [parameter: {'nama pengguna': '123', 'kata laluan': '123'}]

    mysql是否设置了主键id?

    balas
    0
  • 迷茫

    迷茫2017-04-18 10:23:08

    ix_users_username tidak boleh diulang, cuba tukar nama pengguna

    balas
    0
  • ringa_lee

    ringa_lee2017-04-18 10:23:08

    nama pengguna unik

    balas
    0
  • ringa_lee

    ringa_lee2017-04-18 10:23:08

    Saya menambahkan pertanyaan dan pertimbangan di hadapannya, itu sahaja

    @app.route("/register", methods=["GET", "POST"])
    def register():
        form = RegisterForm()
        if form.validate_on_submit():
            user = User(
                username=form.username.data,
                password=form.password.data
            )
            if(User.query.filter_by(username=user.username).first()):
                flash("当前用户名已经注册!")
                return render_template("/register.html", form=form)
            else:
                flash("注册成功!")
                db.session.merge(user)
                return render_template("/register.html", form=form)
        return render_template("/register.html", form=form)

    balas
    0
  • Batalbalas