我不明白为什么会出现以下连接错误。我尝试了很多不同的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, '')
答案 0 :(得分:0)
每次循环都不要关闭你的连接 循环结束后关闭它。
移动:
db.close()
到while True:
完成执行后的行。