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
Consider removing the infinite while True
loop and use a connection cursor for execute and fetch statements:
conn = sqlite3.connect(db_path, isolation_level=None ,timeout=30000)
print("Opened database successfully")
cur = conn.cursor()
cur.execute("select * from 'actions' where 'owner'='1';")
for data in cur.fetchall()
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'):
cur.execute("delete from 'actions' where 'rid'="+str(data[0])+";")
conn.commit()
#else:
# print(r.text)
cur.close()
conn.close()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With