Python / Flask - 编程错误

时间:2017-02-14 00:24:09

标签: python python-2.7 flask sqlalchemy flask-sqlalchemy

我正在尝试为我的项目实现一个简单的烧瓶登录系统,但过了一会儿,服务器崩溃了,我在日志中得到了这个:

2017-02-13 19:06:56,833 [      Thread-393][          pool][   ERROR] Exception during reset or similar
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 687, in _finalize_fairy
    fairy._reset(pool)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 829, in _reset
    pool._dialect.do_rollback(self)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 440, in do_rollback
    dbapi_connection.rollback()
ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 140323586025216 and this is thread id 140323602810624
2017-02-13 19:06:56,834 [      Thread-393][          pool][   ERROR] Exception closing connection <sqlite3.Connection object at 0x7f9fc47ce200>
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 300, in _close_connection
    self._dialect.do_close(connection)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 446, in do_close
    dbapi_connection.close()
ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 140323586025216 and this is thread id 140323602810624
2017-02-13 19:16:53,257 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2017-02-13 19:16:53,257 [     Thread-1179][           log][    INFO] BEGIN (implicit)
2017-02-13 19:16:53,258 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id, users.username AS users_username, users.password AS users_password, users.disp AS users_disp
FROM users
WHERE users.username IN (?) AND users.password IN (?)
 LIMIT ? OFFSET ?
2017-02-13 19:16:53,258 [     Thread-1179][           log][    INFO] SELECT users.id AS users_id, users.username AS users_username, users.password AS users_password, users.disp AS users_disp
FROM users
WHERE users.username IN (?) AND users.password IN (?)
 LIMIT ? OFFSET ?
2017-02-13 19:16:53,258 INFO sqlalchemy.engine.base.Engine ('RicardoS', 'rvs92', 1, 0)
2017-02-13 19:16:53,258 [     Thread-1179][           log][    INFO] ('RicardoS', '1234', 1, 0)
2017-02-13 19:16:56,231 [     Thread-1176][          pool][   ERROR] Exception during reset or similar
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 687, in _finalize_fairy
    fairy._reset(pool)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 829, in _reset
    pool._dialect.do_rollback(self)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 440, in do_rollback
    dbapi_connection.rollback()
ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 140323619596032 and this is thread id 140323611203328
2017-02-13 19:16:56,231 [     Thread-1176][          pool][   ERROR] Exception closing connection <sqlite3.Connection object at 0x7f9fc46fe858>
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 300, in _close_connection
    self._dialect.do_close(connection)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 446, in do_close
    dbapi_connection.close()
ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 140323619596032 and this is thread id 140323611203328
2017-02-13 19:22:16,394 [      MainThread][     runserver][   ERROR] Uncaught exception
Traceback (most recent call last):
  File "runserver.py", line 366, in <module>
    main()
  File "runserver.py", line 362, in main
    host=args.host, port=args.port, ssl_context=ssl_context)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 843, in run
    run_simple(host, port, self, **options)
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 694, in run_simple
    inner()
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 659, in inner
    srv.serve_forever()
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 499, in serve_forever
    HTTPServer.serve_forever(self)
  File "/usr/lib/python2.7/SocketServer.py", line 233, in serve_forever
    self._handle_request_noblock()
  File "/usr/lib/python2.7/SocketServer.py", line 292, in _handle_request_noblock
    self.handle_error(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 290, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 607, in process_request
    t.start()
  File "/usr/lib/python2.7/threading.py", line 736, in start
    _start_new_thread(self.__bootstrap, ())
error: can't start new thread

登录的部分是这一部分:

engine = create_engine('sqlite:///login.db', connect_args={'check_same_thread': False}, echo=True)
app = Flask(__name__)
app.secret_key = os.urandom(12)

def do_login(self):


    POST_USERNAME = str(request.form['username'])
    POST_PASSWORD = str(request.form['password'])

    Session = sessionmaker(bind=engine)
    s = Session()
    query = s.query(User).filter(User.username.in_([POST_USERNAME]), User.password.in_([POST_PASSWORD]) )
    result = query.first()
    if result:
        session['logged_in'] = True
    else:
        flash('Password Errada!')
    return render_template('login.html')

请帮助,我无法解决这个问题,我尝试了所有可以找到的修复

0 个答案:

没有答案