2016-06-17 5 views
0

не делать я нуб о SQLite (но несколько переживается как Pythonista), но я глубоко смущен, почему это (Python 2.7, DBPATH путь к базе данных) ...Python sqlite3 удалите все

import sqlite3 

connection = sqlite3.connect(DBPATH) 
cursor = connection.cursor() 
query = "SELECT * from jobs" 
cursor.execute(query) 
print(cursor.fectchall()) 
query = "DELETE from jobs" 
cursor.execute(query) 

... Выводит содержимое таблицы (таким образом, имя таблицы справа), не изменяя ее. Может ли кто-нибудь указать на очевидное?

+1

После того, как 'conn.execute()' перейдет в 'conn.commit()', чтобы зафиксировать ваши изменения. – bernie

+1

Именование путается. Определение курсора как «conn» (соединение) не полезно для понимания. В этом случае я думаю, что ответ @bernie на самом деле является 'connection.commit()', потому что вы используете нестандартное именование? – roganjosh

+0

К сожалению, код начинался как часть copypasta и развился оттуда. Я исправлю именование. Спасибо вам всем. Изменить: изменена переменная на курсор. –

ответ

3

Из инструкции:

совершить()

Этот метод фиксирует текущую транзакцию. Если вы не вызываете этот метод , все, что вы делали со времени последнего вызова commit(), не видно из других подключений к базе данных. Если вам интересно, почему вы не видите данные, которые у вас есть , записанные в базу данных, пожалуйста, проверьте, что вы не забыли вызвать этот метод.

Вместо этого вы можете установить «уровень изоляции» при подключении, который автоматизирует коммиты для вас.

self.db = sqlite3.connect(self.db_name, isolation_level=None) 
2

У вас должно быть commit() после каждого CUD Операция, которую вы выполняете в своей базе данных.

Если вы C reate, U бновить или D далить, то commit().

+1

Извините, что я не могу выбрать два «правильные» ответы. Я думаю, что оба они очень хороши. И тебе спасибо. –

Смежные вопросы