2016-12-04 10 views
1

なぜ次の接続エラーが発生するのか分かりません。私は、cur = db.cursor()とcur.close()、db.close()の配置のさまざまな反復を試みました。MySQL/Python Connection Interfaceデータベースへのエラー

ループは1サイクルで正常に実行されます(正常にデータベースに書き込まれます)。しかし、ループの2番目のサイクルでは、以下のエラーが表示されます。私のコードで何が間違っていますか?

#!/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

ループを通って接続するたびに閉じないでください。
ループが終了したら閉じます。

移動:ラインへ

db.close() 

あなたwhile True:の実行が終了した後。

+0

それをしました。私はdb.closeをexceptセクションに移しました。そして、それはループし、問題なくデータベースに書き込みます。ありがとう! – RPiNoob

関連する問題