2016-10-09 1 views
0

У меня возникла странная проблема с куском кода python.python: добавление данных в виде строки в mysql дает странную ошибку

Идея, как она должна работать: 1. вводится штрих-код (теперь на данный момент хард-код); 2. barcode просматривается в локальном mysqldb, если не найден, штрих-код просматривается через api из datakick, если его там тоже не найти, шаг 3 3. Я хочу добавить штрих-код в свою локальную базу данных mysqld и запросить некоторые вход.

Теперь проблема: она работает! als long, поскольку вы заполняете цифры для naamProduct. Если вы используете буквы (например, я заполнил Bla как productname), я получаю странную ошибку SQL (_mysql_exceptions.OperationalError: (1054, "Unknown column 'Bla' in 'field.list'")

Я проверил таблицы в mysql, и типы все в порядке. Таблица, в которой должно быть указано имя, - это текст. Я также пробовал жестко закодированную строку, которая отлично работает. Использование sql-запроса с консоли mysql также отлично работает. Моя догадка что-то идет не так с входной частью, но я не могу понять, что.

(код по-прежнему не очень аккуратным с исключениями, я знаю;) Работа на ней шаг за шагом)

`

def barcodeFunctie(sql): 
    con = mdb.connect ('localhost', 'python', 'python', 'stock') 
    cur = con.cursor() 
    cur.execute(sql) 
    ver = cur.fetchone(); 
    con.commit() 
    con.close() 
    return ver 

#barcode = '8710624957278' 
#barcode = '2147483647' 
barcode = '123' 

#zoeken op barcode. Barcode is ook de sleutel in de tabel. 
sql = "select * from Voorraad where Id=%s" % barcode 

if barcodeFunctie(sql) == "None": 
    print "geen output" 
else: 
    try: 
      url='https://www.datakick.org/api/items/'+barcode 
      data = json.load(urllib2.urlopen(url)) 
      print data['brand_name'], data['name'] 
    except: 
      #barcode komt niet voor in eigen db en niet in db van datakick, in beide toevoegen 
      print barcode, " barcode als input" 

      naamProduct = str(raw_input("Wat is de naam van het product? ")) 
      hoeveelheidProduct = raw_input("Hoeveel inhoud heeft het product? ") 

      sql = "insert into Voorraad (Id, NaamProduct,HoeveelHeidProduct) values (%s,%s,%s)" % (barcode, naamProduct, hoeveelheidProduct) 
      barcodeFunctie(sql) 
      print "meuktoegevoegd! :D" 

`

ответ

0
sql = "select * from Voorraad where Id=%s" % barcode 

Ваша проблема заключается в том, что вам не хватает котировок для вашего идентификатора. Измените эту строку следующим образом:

sql = "select * from Voorraad where Id='%s'" % barcode 
+0

А должны были видеть, что с этим строка не работает, но Int сделаем. Добавление цитаты исправлено, спасибо за помощь и ваш ответ – Janko

+0

Вам также нужно добавить цитаты в свой оператор insert. Обратите внимание на ответ Криса. – sisanared

0

Я считаю, что вы пропустили одиночный кавычек для всех ваших заполнителей строк. Это объясняет, почему оно работает с числами, но не со строками.

Я не проверял, но на мой взгляд, ваш SQL заявление должно выглядеть следующим образом:

sql = "insert into Voorraad (Id, NaamProduct,HoeveelHeidProduct) values ('%s','%s','%s')" % (barcode, naamProduct, hoeveelheidProduct) 
+0

jep, добавил другие кавычки и после ответа SSNR. Он работает сейчас. Спасибо за помощь. – Janko

Смежные вопросы