MySQL / Python连接InterfaceError到数据库

时间:2016-12-04 17:50:33

标签: python mysql error-handling connection

我不明白为什么会出现以下连接错误。我尝试了很多不同的cur = db.cursor()和cur.close(),db.close()的放置迭代。

循环运行正常一个循环(并成功写入数据库)。但是,在循环的第二个循环中,它给出了下面的错误。我的代码出了什么问题?

#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
import datetime 
import PCF8591 as ADC
import math
import Adafruit_DHT as DHT
import Adafruit_DHT
from time import strftime
DHT_TYPE = Adafruit_DHT.DHT11
#setup to write to MySQL database
import MySQLdb

#define how long to wait between readings
FREQUENCY_SECONDS      = 2

DO = 17
GPIO.setmode(GPIO.BCM)

#Variables for MySQL
db = MySQLdb.Connection(host= "localhost",
              user="mysql-user",
              passwd="password",
              db="database")

#humiture variables
Sensor = 11
humiture = 17

print('Press Ctrl-C to quit.')

def setup():
    print 'Setting up, please wait...'
    ADC.setup(0x48)
    GPIO.setup(DO, GPIO.IN)

def destroy():
    GPIO.cleanup()

while True:
    humidity, temperature = DHT.read_retry(Sensor, humiture)
    tempF = (temperature*1.8)+32
    datetimeWrite = (time.strftime("%Y-%m-%d ") + time.strftime("%H:%M:%S"))
    print datetimeWrite
    print('Temperature: {0:0.1f} F'.format(tempF))
    print('Humidity:    {0:0.1f} %'.format(humidity))
    #connect to wordpress database:
    cur = db.cursor()   
    sql = ("""INSERT INTO humiture (dateTime,temp, humidity) VALUES (%s,%s,%s)""",(datetimeWrite,tempF,humidity))
    try:
        print "Writing to database..."

        # Execute the SQL command
        cur.execute(*sql)
        # Commit your changes in the database
        db.commit()

        print "Write Complete"

    except KeyboardInterrupt:
        destroy()
        break

    cur.close()
    db.close()
    # Wait before taking another reading
    time.sleep(FREQUENCY_SECONDS)

错误讯息:

Traceback (most recent call last):
  File "Sensor_MySQLv2.py", line 54, in <module>
    cur.execute(*sql)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 155, in execute
    charset = db.character_set_name()
_mysql_exceptions.InterfaceError: (0, '')

1 个答案:

答案 0 :(得分:0)

每次循环都不要关闭你的连接 循环结束后关闭它。

移动:

db.close()

while True:完成执行后的行。