Найти - Пользователи
Полная версия: sqlite3, не обновляются и не удаляются row
Начало » Базы данных » sqlite3, не обновляются и не удаляются row
1
russian_bear
Здравствуйте дорогие,

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

Кстати не знал что есть такой баг, если забыть про круглые скобки у conn.commit то при update/delete в IDE PyCharm визуально все хорошо и при прочтении таблицы SELECT-ом в той-же программе *.py где было сделано update/delete получаем на выходе что как будто изменения в базе произведены и данные изменились, и при запуске отдельного *.py с операцией только прочтения SELECT уже по-честному видишь что база не проапдейтилась.
terabayt
russian_bear
Кстати не знал что есть такой баг
это не баг!
>>> def f():
...  print('Hello')
... 
>>> f
<function f at 0x7fef0455e398>
>>> f()
Hello
py.user.next
terabayt
это не баг
Он не про это.

russian_bear
Кстати не знал что есть такой баг
Не, ты её не сразу смотри, а закрой и открой повторно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB