Тема: SQLITE Connection з SQLITE_OPEN_FULLMUTEX
Є багатопоточна python програма (скрипт). Яка із різних потоків звертається до бази даних
Питання: як зробити безпечне багатопотокове звернення до бази даних ?
Знайшов інформацію про SQLITE_OPEN_FULLMUTEX
Але не можу знайти жодного приклада з python
class Database:
__instance = None
@staticmethod
def get_instance():
"""Static method to get the singleton instance of the class"""
if Database.__instance is None:
Database()
return Database.__instance
def __init__(self):
dbpath = 'temp\db.sqlite'
"""Private constructor to create the singleton instance of the class"""
if Database.__instance is not None:
raise Exception("Singleton instance already exists. Use get_instance() to get the instance.")
else:
self.connection = sqlite3.connect(dbpath, check_same_thread=False)
Database.__instance = self
# Create the ChannelName table if it doesn't exist
self.connection.execute('''
CREATE TABLE IF NOT EXISTS ChannelName (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL UNIQUE
)
''')
# Create the Settings table if it doesn't exist
self.connection.execute('''
CREATE TABLE IF NOT EXISTS Settings (
id INTEGER PRIMARY KEY,
image_path TEXT NOT NULL,
font_path TEXT NOT NULL,
highlight_color TEXT NOT NULL,
text_color TEXT NOT NULL,
channel_id INTEGER UNIQUE,
FOREIGN KEY (channel_id) REFERENCES ChannelName(id)
)
''')
# Commit the changes
self.connection.commit()
def close(self):
# Close the connection
self.connection.close()
def LoadData(self):
# Retrieve data from database
data = self.connection.execute('''
SELECT cn.id, cn.name, s.image_path, s.font_path, s.highlight_color, s.text_color
FROM ChannelName cn
JOIN Settings s
ON cn.id = s.channel_id
''').fetchall()
return data
Це що, SQLITE_OPEN_FULLMUTEX не існує для python ?
Додаткова важлива інформація: Як ви бачите з коду я використовую Singleton (також в мене був cursor, який я видалив, тому що не впевнений чи він потрібний)
cursor = self.connection.cursor()
Чи можна використовувати Singleton в багато поточній програмі ? База даних файлова, так що зазвичай немає сенсу закривати з'єднання під час всього часу роботи програми, але не знаю чи це відноситься для багатопотокових програм