python: добавление данных в виде строки в mysql дает странную ошибку

#python #mysql

#python #mysql

Вопрос:

У меня странная проблема с фрагментом кода python.

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

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

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

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

`

 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"
  

`

Ответ №1:

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

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

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

Комментарии:

1. Я должен был видеть, что с этой строкой не работает, но работает int. Добавление цитаты исправило это, спасибо за помощь и ваш ответ

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

Ответ №2:

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

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

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

Комментарии:

1. jep, добавил другие кавычки также после SSNR его ответа. Теперь это работает. Спасибо за помощь.