Как переделать класс sqlite под aiosqlite

У меня есть удобный класс для работы с sqlite:

class DB(object):
def __init__(self, db_fp='data/data.db'):
    self.db_fp = db_fp
    self.db = sqlite3.connect(self.db_fp)
    self.cure = self.db.cursor()
    self.create_tables()

def __enter__(self):
    return self

def __exit__(self, type, value, traceback):
    self.db.commit()
    self.cure.close()
    self.db.close()

def create_tables(self):
    self.cur.execute("""CREATE TABLE IF NOT EXISTS users(
        _id BIGINT NOT NULL, 
        balance BIGINT NOT NULL, 
        referrer_id BIGINT)""")

    self.db.commit()

def add_user(self, user_id, balance=0):

    response = self.cur.execute("SELECT * FROM users WHERE _id = ?", [int(user_id)]).fetchone()

    if response is None:
        self.cur.execute("INSERT INTO users VALUES (?, ?)", [int(user_id), balance])
        self.db.commit()

# etc



with DB() as db:
    db.add_user(123123)

как реализовать такой же, только для работы с aiosqlite? Так чтобы также можете вызывать этот класс и использовать его методы.


Ответы (1 шт):

Автор решения: Sobolev Minecraft

Если ты используешь sqlite3.connect, то используй aiosqlite.connect, и на каждый запрос типа cursor, execute и так далее, добавляй сначала await.

на официальном гитхабе aiosqlite есть пример

db = await aiosqlite.connect(...)
cursor = await db.execute('SELECT * FROM some_table')
row = await cursor.fetchone()
rows = await cursor.fetchall()
await cursor.close()
await db.close()
→ Ссылка