У меня возникла ошибка блокировки базы данных, когда мне нужно удалить запись из таблицы actions
.база данных sqlite3 заблокирована
есть две программы, чтение и запись в базе данных sqlite3
один по переменной программе, записать результаты аппаратных действий на столе sqlite3 и другой питон скрипт, который читать записи из SQLite и обрабатывать их и удалите строки после завершения задания.
но сценарий питона показать database is locked
ошибку на удаление строки ..
имя БД: db.db
дб стол: TABLE 'actions' ( 'rid' INTEGER PRIMARY KEY AUTOINCREMENT, 'owner' INTEGER, 'action' TEXT, 'node' TEXT, 'value' TEXT
питон скрипт:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sqlite3
import time
import os.path
import requests
#import urllib.parse
#defines
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
db_path = os.path.join(BASE_DIR+"/dbs/", "db.db")
wd_file_path = os.path.join(BASE_DIR, "wd")
pid = os.getpid()
conn = sqlite3.connect(db_path, isolation_level=None ,timeout=30000)
print ("Opened database successfully");
while True:
res = conn.execute("select * from 'actions' where 'owner'='1';")
#conn.commit()
data=res.fetchone()
print(data)
if (data is None) :
print('nothing @ '+str(time.time()))
with open(wd_file_path, 'w') as file_:
file_.write("{'pid'='"+str(pid)+"','time'='"+str(time.time())+"'}")
time.sleep(0.5)
else:
#print(data)
r = requests.post("http://127.0.0.1/json.php", data={'act': data[2], 'val': data[4]})
#if (r.text == '1'):
conn.execute("delete from 'actions' where 'rid'="+str(data[0])+";")
conn.commit()
#else:
# print(r.text)
, как вы можете видеть, что я положил isolation_level=None
и timeout=30000
на мое соединение ection , но я получаю ошибку блокировки базы данных много раз
Сценарий может быть блокировка базы данных. Почему вы обертываете запросы БД, запись файла и веб-пост в цикле while, который на самом деле бесконечен, поскольку нет 'break?' – Parfait
, почему вы открываете базу данных из цикла while? вы открываете и закрываете соединение на 'while True:' – roozgar