#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 его ответа. Теперь это работает. Спасибо за помощь.