Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Python глючит, или меня глючит? Вот в чем вопрос.  (Прочитано 900 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн obgorelyi

  • Автор темы
  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Всем доброго времени суток! Встретился с неожиданной для себя проблемой при использовании БД SQlite3

Вот собственно проблемный участок:
# Считываем строку
  counter=0
  for col in columns:
    print("counter = "+str(counter))
    print("col = "+col)
    tmp=f.readline()
    print("tmp = "+tmp)
    with con:
      cur = con.cursor()
      cur.execute("UPDATE "+table+" SET "+col+"="+tmp+" WHERE id="+str(iteration))
    counter=counter+1

Данным кодом пользовался в аналогичном приложении, вывод из консоли меня удивил:
iteration = 1
Создаем строку
counter = 0
col = engine
tmp = CFM71S

Traceback (most recent call last):
  File "fill_db_engine.py", line 40, in <module>
    cur.execute("UPDATE "+table+" SET "+col+"="+tmp+" WHERE id="+str(iteration))
sqlite3.OperationalError: no such column: CFM71S

Объясните мне дураку, почему пытаясь обновить значение в колонке engine он ищет колонку CFM71S. Для эксперимента менял "+col+"="+tmp+" на "+tmp+"="+col+" при котором как раз и должна срабатывать ошибка, при том она срабатывает.:(
С чем может быть связан этот глюк?
Если это не глюк, то где меня проглючило? (ткните носом)

Ошибку, обошел за счет проверки, является эта колонка, колонкой для текста или же для цифр.
for col in columns:
    print("counter = "+str(counter))
    print("col = "+col)
    tmp=f.readline()
    print("tmp = "+tmp)
    if(col=="engine"):
      query="UPDATE "+table+" SET "+col+"='"+tmp+"' WHERE id="+str(iteration)
    else:
      query="UPDATE "+table+" SET "+col+"="+tmp+" WHERE id="+str(iteration)
    print("query = "+query)
    with con:
      cur = con.cursor()
      cur.execute(query)
    counter=counter+1

Как я понял ошибка была только в отсутствии кавычек или апострофов. Надеюсь правильно понял.
« Последнее редактирование: 17 Мая 2013, 18:38:10 от obgorelyi »

Оффлайн cav

  • Любитель
  • *
  • Сообщений: 57
    • Просмотр профиля
    • Истории одного программера
по формату sql символьны,тестовые и дата с временем должны заворачиваться в одинарные кавычки
вот так запрос оно крайне не рекомендуется собирать ибо чревато всякими проблеммами
(Ubuntu 12.04, Ubuntu 10.04)
http://cavinc.blogspot.com/

 

Страница сгенерирована за 0.029 секунд. Запросов: 26.