Уведомления

Группа в Telegram: @pythonsu

#1 Март 22, 2015 12:58:46

russian_bear
Зарегистрирован: 2014-09-23
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite3, не обновляются и не удаляются row

Здравствуйте дорогие,

помогите пожалуйста решить проблему с sqlite3 (может и не проблема вовсе а сам туплю)

Есть простейшая база созданная вот так:

 import sqlite3
conn = sqlite3.connect('test.db')
conn.execute('''CREATE TABLE COMPANY
       (ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL);''')
conn.close() 

далее эта база заполнена простейшим примером вот так :
 import sqlite3
conn = sqlite3.connect('test.db')
conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (1, 'Paul', 32, 'California', 20000.00 )");
conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (2, 'Allen', 25, 'Texas', 15000.00 )");
conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )");
conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )");
conn.commit()
conn.close() 

Проблема состоит в том, что при попытке update или delete записи фактически удаления/апдейта не происходит. Например пытаюсь обновить записи вот таким простым примером:
import sqlite3
conn = sqlite3.connect('test.db')
conn.execute("UPDATE COMPANY set NAME = 55555 where ID=4")
conn.execute("UPDATE COMPANY set ADDRESS = 55555 where ID=4")
conn.execute("UPDATE COMPANY set SALARY = 55555 where ID=4")
conn.commit
cursor = conn.execute("SELECT id, name, address, salary  from COMPANY")
for row in cursor:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"
conn.close()
Прикол в том что вывод в терминал при отработке этого кода показывает что как-бы все хорошо и что база обновилась, т.е. все значения для ID=4 приняли величину 55555 . (см. 1.png)
Однако при чтении этой базы в следующий раз видно что никакие поля не обновились (см. 2.png)
Важно отметить, если я даю ровно те-же команды(UPDATE COMPANY set SALARY = 55555 where ID=4) но не из питона а из отдельной проги-менеджера по работе с sqlite3 (SQLiteManager), то происходит нормальное полноценное обновление базы.
Еще раз, кратко опишу суть - получается что python из sqlite3 не может DELETE или UPDATE базу SQLite3, при этом чтение/запись происходят нормально. И при этом эти-же команды DELETE или UPDATE выполненные из отдельного приложения SQLiteManager(hwww.sqlabs.com) работают нормально.
Помогите советом, уже целый день убил в попытках разобраться, уже не знаю куда и копать
Спасибо за любую наводку….
http://tsc-kupol.ru/1.PNG
http://tsc-kupol.ru/2.PNG

Отредактировано russian_bear (Март 22, 2015 13:00:47)

Прикреплённый файлы:
attachment 2.PNG (66,3 KБ)

Офлайн

#2 Март 22, 2015 13:37:30

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

sqlite3, не обновляются и не удаляются row

А почему же вы решили, что методу commit не нужны круглые скобки?



Офлайн

#3 Март 22, 2015 16:58:42

russian_bear
Зарегистрирован: 2014-09-23
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite3, не обновляются и не удаляются row

FishHook
А почему же вы решили, что методу commit не нужны круглые скобки?
Спасибо дружище !!!! Действительно дело было в пропущенных круглых скобках у conn.commit()

Кстати не знал что есть такой баг, если забыть про круглые скобки у conn.commit то при update/delete в IDE PyCharm визуально все хорошо и при прочтении таблицы SELECT-ом в той-же программе *.py где было сделано update/delete получаем на выходе что как будто изменения в базе произведены и данные изменились, и при запуске отдельного *.py с операцией только прочтения SELECT уже по-честному видишь что база не проапдейтилась.

Офлайн

#4 Март 22, 2015 17:04:03

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

sqlite3, не обновляются и не удаляются row

russian_bear
Кстати не знал что есть такой баг
это не баг!
>>> def f():
...  print('Hello')
... 
>>> f
<function f at 0x7fef0455e398>
>>> f()
Hello



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Март 22, 2015 17:04:23)

Офлайн

#5 Март 22, 2015 23:18:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8667
Репутация: +  770  -
Профиль   Отправить e-mail  

sqlite3, не обновляются и не удаляются row

terabayt
это не баг
Он не про это.

russian_bear
Кстати не знал что есть такой баг
Не, ты её не сразу смотри, а закрой и открой повторно.



Отредактировано py.user.next (Март 22, 2015 23:22:40)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version