i got database lock error when i have to delete the record from actions table.
there are two program that reading and writing on a sqlite3 database
one is a c program that write the results of hardware actions on a sqlite3 table and other is a python script that read the records from sqlite and process them and delete the rows after finished the job.
but the python script show database is locked error on delete the row..
db name : db.db
db table :
TABLE 'actions' (
'rid' INTEGER PRIMARY KEY AUTOINCREMENT,
'owner' INTEGER,
'action' TEXT,
'node' TEXT,
'value' TEXT
the python script:
#!/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)
as you can see i put isolation_level=None and timeout=30000 on my connection
but i get database lock error many time