【问题标题】:got exception when do a loop input to database Python对数据库 Python 进行循环输入时出现异常
【发布时间】:2018-01-30 05:00:31
【问题描述】:

所以,我想以自动增量作为主键多次输入数据,并将主键作为输入结果返回。这是我的代码:

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)

所以,当我第一次输入时是成功的,但是当我再次输入时,我得到了一个错误异常:

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, '')

那么,异常原因是什么?

【问题讨论】:

    标签: python python-3.x pymysql


    【解决方案1】:

    当然你会得到一个异常 - 因为你在执行查询后关闭连接

    auth.cursor.execute(sql)
    auth.db.commit()
    
    result = auth.cursor.lastrowid
    
    auth.db.close()  # < HERE
    
    return result
    

    您可能会得到一个“关闭游标上的操作”异常,该异常由您过于宽泛的裸 except 子句 (which is bad) 处理 - 然后 - 回滚在 auth.db.rollback() 启动,失败并没有描述性和可以理解的错误。

    其他问题:

    【讨论】:

      猜你喜欢
      • 2015-11-29
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      相关资源
      最近更新 更多