1

So, I want to input data in multiple times with auto increment as primary key and return the primary key as the input result. so there's my code:

connectDB.py

import pymysql
class auth:

   db = pymysql.connect("localhost","root","","rfid")

   cursor = db.cursor()

   def inputData(nama):
       sql = "INSERT INTO auth (nama) VALUES ('%s');" % (nama)

       try:
           auth.cursor.execute(sql)
           auth.db.commit()


           result = auth.cursor.lastrowid

           auth.db.close()

           return result
       except:
           err = "Error: unable to fetch data"
           auth.db.rollback()

           auth.db.close()

           return err

test.py

import re
import PyMySQL
from connectDB import auth

while True:

     inputs2 = input("masukan nama: ")


     hasil = auth.inputData(inputs2)

     print(hasil)

so, when I do an input in the first time is success but when Itry to input again I got an error exception:

Traceback (most recent call last):
  File "/home/pi/Desktop/learn/RFIDdatabase/connectDB.py", line 29, in inputData
auth.cursor.execute(sql)

  File "/usr/local/lib/python3.4/dist-packages/pymysql/cursors.py", line 166, in execute
result = self._query(query)

  File "/usr/local/lib/python3.4/dist-packages/pymysql/cursors.py", line 322, in _query
conn.query(q)

  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 855, in query
self._execute_command(COMMAND.COM_QUERY, sql)

  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 1071, in _execute_command
raise err.InterfaceError("(0, '')") 
pymysql.err.InterfaceError: (0, '')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test.py", line 12, in <module>
hasil = auth.inputData(inputs2)

  File "/home/pi/Desktop/learn/RFIDdatabase/connectDB.py", line 41, in inputData
auth.db.rollback()

  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 792, in rollback
self._execute_command(COMMAND.COM_QUERY, "ROLLBACK")

  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 1071, in _execute_command
raise err.InterfaceError("(0, '')")
pymysql.err.InterfaceError: (0, '')

so, What the exception cause?

1 Answer 1

3

Of course you would get an exception - cause you close the connection after executing a query:

auth.cursor.execute(sql)
auth.db.commit()

result = auth.cursor.lastrowid

auth.db.close()  # < HERE

return result

You probably getting an "operation on a closed cursor" exception which is handled by your overly broad bare except clause (which is bad) - then - the roll back is initiated at auth.db.rollback() which fails with a not descriptive and understandable error.

Other issues:

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.