2013-03-07 5 views
0

Я создаю приложение с потоком mufti, которое использует базу данных Sqlite для хранения информации.Sqlite Database multi-threaded Операция путаницы SELECT и UPDATE

Один из нити выполняет операции выбора, где она выбирает строки, в которых конкретный столбец пуст следующим образом:

for i in cursor.execute('SELECT Beeid from SongLink WHERE Dlink=\'\''): 

другой поток также обращается к базе данных и пытается изменить значение Dlink из колонны.

Будет выше код всегда дают столбцы, где Dlink = \ «\»» Заботясь о новинках, сделанных другом потоком или это может привести к неправильному выбору строк

+0

Из любопытства, почему запрос для '\ '' 'когда' '' 'будет делать, и почему бы не использовать' NULL'? –

+0

Это просто старая привычка избегать всех видов цитат, но спасибо за указание на это. – SteveIrwin

ответ

1

Использование separate connections per thread и SQLite будут поддерживать целостность данных.

Изменения в базе данных в одном соединении не будут отображаться в других потоках, пока вы не выполните а) не зафиксируете изменения и b) в соединениях, которые хотят видеть эти новые данные, запускается новая транзакция.

Вы хотите установить параметр check_same_thread подключения к True.

+0

Спасибо. Однако скажу, что я фиксирую изменения во втором потоке, который меняет значение Dlink. Команда Select из первого потока может также показывать значения, которые не имеют Dlink как «". Пожалуйста, просветите. – SteveIrwin

+1

@SteveIrwin: пока вы не начнете новую транзакцию, этого не произойдет. И база данных никогда не вернет значения, которые не соответствуют вашему запросу. –