Как переделать класс 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()