I have a flask program. On the get method for ‘/’ route, python code accesses the MYSQL database with the following
<code>""" returns cash of current user """
argdb.execute("SELECT cash FROM fin_users WHERE id = %s", (session['user_id'],))
<code>""" returns cash of current user """
def returncash(argdb):
argdb.execute("SELECT cash FROM fin_users WHERE id = %s", (session['user_id'],))
row = argdb.fetchall()
return row[0]['cash']
</code>
""" returns cash of current user """
def returncash(argdb):
argdb.execute("SELECT cash FROM fin_users WHERE id = %s", (session['user_id'],))
row = argdb.fetchall()
return row[0]['cash']
This works most of the time. However if in my browser I reload the page twice quickly on the ‘/’ route, the program hangs. I’ve narrowed it down to this line
<code>argdb.execute("SELECT cash FROM fin_users WHERE id = %s", (session['user_id'],))
<code>argdb.execute("SELECT cash FROM fin_users WHERE id = %s", (session['user_id'],))
</code>
argdb.execute("SELECT cash FROM fin_users WHERE id = %s", (session['user_id'],))
Seems like its trying to access the same records at the same time and freezing? There are no error messages, it just never gets to the next line. If I hit refresh a couple more times I get the following error
<code>ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 1473, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 882, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 880, in full_dispatch_request
rv = self.dispatch_request()
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 865, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePluslandf.py", line 12, in innerFunction
return f(*args, **kwargs)
File "E:myProgramsfinancePlusapp.py", line 31, in index
cash = func.returncash(db)
File "E:myProgramsfinancePlusfunc.py", line 37, in returncash
argdb.execute("SELECT cash FROM fin_users WHERE id = %s", (session['user_id'],))
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorcursor.py", line 551, in execute
self._handle_result(self._connection.cmd_query(stmt))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorconnection.py", line 490, in cmd_query
result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorconnection.py", line 404, in _handle_result
columns[i] = self._protocol.parse_column(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorprotocol.py", line 239, in parse_column
(packet, _) = utils.read_lc_string(packet) # db
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorutils.py", line 199, in read_lc_string
IndexError: bytearray index out of range
<code>ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 1473, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 882, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 880, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 865, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePluslandf.py", line 12, in innerFunction
return f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusapp.py", line 31, in index
cash = func.returncash(db)
^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusfunc.py", line 37, in returncash
argdb.execute("SELECT cash FROM fin_users WHERE id = %s", (session['user_id'],))
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorcursor.py", line 551, in execute
self._handle_result(self._connection.cmd_query(stmt))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorconnection.py", line 490, in cmd_query
result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorconnection.py", line 404, in _handle_result
columns[i] = self._protocol.parse_column(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorprotocol.py", line 239, in parse_column
(packet, _) = utils.read_lc_string(packet) # db
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorutils.py", line 199, in read_lc_string
if buf[0] == 251: # xfb
~~~^^^
IndexError: bytearray index out of range
</code>
ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 1473, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 882, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 880, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 865, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePluslandf.py", line 12, in innerFunction
return f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusapp.py", line 31, in index
cash = func.returncash(db)
^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusfunc.py", line 37, in returncash
argdb.execute("SELECT cash FROM fin_users WHERE id = %s", (session['user_id'],))
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorcursor.py", line 551, in execute
self._handle_result(self._connection.cmd_query(stmt))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorconnection.py", line 490, in cmd_query
result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorconnection.py", line 404, in _handle_result
columns[i] = self._protocol.parse_column(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorprotocol.py", line 239, in parse_column
(packet, _) = utils.read_lc_string(packet) # db
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorutils.py", line 199, in read_lc_string
if buf[0] == 251: # xfb
~~~^^^
IndexError: bytearray index out of range
Not too sure what I can do to resolve this. Any help is appreciated! Sorry I am pretty new to programming, hope this all makes sense
I tried adding a lock table to the record on the read, as I thought maybe that was what was causing the issue
<code>""" returns cash of current user """
argdb.execute("LOCK TABLES fin_users READ")
argdb.execute("SELECT cash FROM fin_users WHERE id = %s", (session['user_id'],))
argdb.execute("UNLOCK TABLES")
<code>""" returns cash of current user """
def returncash(argdb):
argdb.execute("LOCK TABLES fin_users READ")
argdb.execute("SELECT cash FROM fin_users WHERE id = %s", (session['user_id'],))
row = argdb.fetchall()
argdb.execute("UNLOCK TABLES")
return row[0]['cash']
</code>
""" returns cash of current user """
def returncash(argdb):
argdb.execute("LOCK TABLES fin_users READ")
argdb.execute("SELECT cash FROM fin_users WHERE id = %s", (session['user_id'],))
row = argdb.fetchall()
argdb.execute("UNLOCK TABLES")
return row[0]['cash']
but I got the following error
<code>"GET / HTTP/1.1" 500 -
[2024-05-21 14:25:39,567] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 1473, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 882, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 880, in full_dispatch_request
rv = self.dispatch_request()
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 865, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePluslandf.py", line 12, in innerFunction
return f(*args, **kwargs)
File "E:myProgramsfinancePlusapp.py", line 31, in index
cash = func.returncash(db)
File "E:myProgramsfinancePlusfunc.py", line 37, in returncash
argdb.execute("SELECT cash FROM fin_users WHERE id = %s", (session['user_id'],))
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorcursor.py", line 551, in execute
self._handle_result(self._connection.cmd_query(stmt))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorconnection.py", line 490, in cmd_query
result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorconnection.py", line 384, in _handle_result
IndexError: bytearray index out of range
<code>"GET / HTTP/1.1" 500 -
[2024-05-21 14:25:39,567] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 1473, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 882, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 880, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 865, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePluslandf.py", line 12, in innerFunction
return f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusapp.py", line 31, in index
cash = func.returncash(db)
^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusfunc.py", line 37, in returncash
argdb.execute("SELECT cash FROM fin_users WHERE id = %s", (session['user_id'],))
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorcursor.py", line 551, in execute
self._handle_result(self._connection.cmd_query(stmt))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorconnection.py", line 490, in cmd_query
result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorconnection.py", line 384, in _handle_result
elif packet[4] == 0:
~~~~~~^^^
IndexError: bytearray index out of range
</code>
"GET / HTTP/1.1" 500 -
[2024-05-21 14:25:39,567] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 1473, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 882, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 880, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesflaskapp.py", line 865, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePluslandf.py", line 12, in innerFunction
return f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusapp.py", line 31, in index
cash = func.returncash(db)
^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusfunc.py", line 37, in returncash
argdb.execute("SELECT cash FROM fin_users WHERE id = %s", (session['user_id'],))
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorcursor.py", line 551, in execute
self._handle_result(self._connection.cmd_query(stmt))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorconnection.py", line 490, in cmd_query
result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:myProgramsfinancePlusvenvLibsite-packagesmysqlconnectorconnection.py", line 384, in _handle_result
elif packet[4] == 0:
~~~~~~^^^
IndexError: bytearray index out of range