2016-01-27 2 views
0

Я пытался выяснить причину ошибки. Я считаю, что он находится в последнем запросе к базе данных. Я отметил его комментариями.Python/MySQL - Ошибка 1064, не могу понять это

Эта ошибка вызывает у меня головную боль в течение последних 30 минут.

import MySQLdb 
import time 

# Create a database connection 
db = MySQLdb.connect(host="******", user="******", passwd="*****", db="*****") 
cur = db.cursor() 

# Create a query to select all IDs 
cur.execute("SELECT id FROM users") 
clientArray = [] 

# Loop over all IDs returned from query, 
# save all IDs in the clientArray 
for row in cur.fetchall(): 
    clientID = str(row[0]) 
    clientArray.append(clientID) 


clientIDInput = ""  
while True: 
    # Check and wait for input 
    clientIDInput = raw_input("") 
    if clientIDInput in clientArray: 
     # Check to see whether user is already signed in to the device 
     cur.execute("SELECT fitnessStatus FROM users WHERE id=%s", (clientIDInput)) 
     data = cur.fetchone() 
     if data[0] == False: 
      cur.execute("UPDATE users SET fitnessStatus='1' WHERE id=%s", (clientIDInput)) 
      checkInTime = time.strftime('%Y-%m-%d %H:%M:%S') 
      checkOutID = raw_input("") 
      if checkOutID == clientIDInput: 
       cur.execute("UPDATE users SET fitnessStatus='0' WHERE id=%s", (clientIDInput)) 
       checkOutTime = time.strftime('%Y-%m-%d %H:%M:%S') 
       print checkInTime 
       print checkOutTime 

       ### I BELIEVE THIS IS THE CAUSE OF THE ERROR ### 
       cur.execute("INSERT INTO activities (id, machinename, checkin, checkout, clientid) VALUES (NULL, Cross Trainer #5, %s, %s, %s)", (checkInTime, checkOutTime, clientIDInput)) 
       # Send checkInTime and checkOutTime to database 

ответ

0

В вашем заявлении INSERT есть синтаксическая ошибка. Попробуйте вложить строку «Cross Trainer # 5» в одинарные кавычки:

cur.execute("INSERT INTO activities (id, machinename, checkin, checkout, clientid) VALUES (NULL, 'Cross Trainer #5', %s, %s, %s)", (checkInTime, checkOutTime, clientIDInput))` 

К счастью, само утверждение уже заключено в двойные кавычки ", так что никаких дальнейших изменений не потребуется :)

Ошибка 1064 немного вводит в заблуждение. Он указывает, amongst others, злоупотребление зарезервированным словом. И действительно: CROSS is a reserved word.

+0

спасибо. Я больше не получаю сообщение об ошибке! К сожалению, ничто не попадает в мою базу данных ... Оно не возвращает никаких ошибок, но оно не добавляет никаких новых вещей в мою таблицу действий. Есть идеи? – Cake

+0

может отсутствовать 'COMMIT WORK' к соединению:' db.commit() 'после соответствующих' UPDATE 'и' INSERT'? Свойство 'autocommit' соединения MySQL отключено по умолчанию afaik. – flaschbier