При работе с БД Ошибка:SQLite objects created in a thread can only be used in that same thread
основной код:
import telebot
import sqlite3
from telebot import types
from db import Database
*здесь идут токены ботов*
conn = sqlite3.connect('wDataBase.db', check_same_thread=False)
db = Database('wDataBase.db')
print("Это 1 файл")
bot_first = telebot.TeleBot(TOKEN_FIRST_BOT)
bot_second = telebot.TeleBot(TOKEN_SECOND_BOT)
@bot_first.message_handler(commands=['start'])
def start_first_bot(message):
if not db.user_exists(message.from_user.id):
start_command = message.text
referrer_worker_id = str(start_command[7:])
if str(referrer_worker_id) != "":
if str(referrer_worker_id) != str(message.from_user.id):
db.add_user(message.from_user.id, referrer_worker_id)
try:
bot_first.send_message("По вашей ссылке зареган новый пользователь!")
except:
pass
else:
db.add_user(message.from_user.id)
bot_first.send_message(message.from_user.id, "Нельзя регистрировать по собственной реферальной ссылке!")
else:
db.add_user(message.from_user.id)
код sql:
import sqlite3
class Database:
def __init__(self, db_file):
self.connection = sqlite3.connect(db_file)
self.cursor = self.connection.cursor()
def user_exists(self, worker_id):
with self.connection:
result = self.cursor.execute("SELECT * FROM 'users' WHERE 'worker_id' = ?", (worker_id,)).fetchall() #здесь получаем массив пользователей, если он есть то в массиве будет только одна запись
return bool(len(result))
def add_user(self, worker_id, referrer_worker_id=None):
with self.connection:
if referrer_worker_id != None:
return self.cursor.execute("INSERT INTO 'shit' ('worker_id'), 'referrer_worker_id') VALUES (?,?) ", (worker_id, referrer_worker_id,))
else:
return self.cursor.execute("INSERT INTO 'users' ('worker_id') VALUES (?) ", (worker_id,))
def count_referals(self, worker_id):
with self.connection:
return self.cursor.execute("SELECT COUNT('id') as count FROM 'users' WHERE 'referrer_worker_id' = ?", (worker_id,)).fetchone()[0]