Ошибка при получении user_id и nickname. Telegram, Aiogram, MySQL, Python
Создаю бота и вот в чем проблема: все username и user_id успешно заносятся в БД, но двумя отдельными строками. Как исправить и сделать их в одну?
Код добавления в бд:
from aiogram.types import ChatActions
import asyncio
import logging
import keyboards as kb
import obsh_files
from aiogram import Bot, types
from aiogram.utils import executor
from aiogram.dispatcher import Dispatcher
from config import TOKEN
import sqlite3
logging.basicConfig(format=u'%(filename)s [ LINE:%(lineno)+3s ]#%(levelname)+8s [%(asctime)s] %(message)s',
level=logging.INFO)
conn = sqlite3.connect("db.db")
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS users
(id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, username TEXT)''')
conn.commit()
conn.close()
class SQLither:
def __init__(self, database) -> object:
self.conn = sqlite3.connect(database)
self.c = self.conn.cursor()
def exists_user(self, user_id):
"""Проверка существования пользователя в БД"""
return bool(self.c.execute("SELECT * FROM users WHERE user_id=?", (user_id,)).fetchone())
def add_to_db(self, user_id, username):
"""Добавление пользователя в БД"""
self.c.execute("INSERT INTO users ('user_id') VALUES(?)", (user_id,)) and self.c.execute("INSERT INTO users ('username') VALUES(?)", (username,))
self.conn.commit()
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)
db = SQLither("db.db")
@dp.message_handler(commands=['start'])
async def process_hi1_command(message: types.Message):
user_id = message.from_user.id
username = message.from_user.username
if not db.exists_user(user_id):
db.add_to_db(user_id, username)
await message.answer("Привет!", reply_markup=kb.markup1)
Ответы (2 шт):
Автор решения: UserGames
→ Ссылка
Вы записываете айди пользователя, а потом совсем отдельно username. Заносите данные через один execute.
self.c.execute("INSERT INTO users(user_id, username) VALUES(?,?)", (user_id, username))
Автор решения: Кто-то
→ Ссылка
- изменить
self.c.execute("INSERT INTO users ('user_id') VALUES(?)", (user_id,)) and self.c.execute("INSERT INTO users ('username') VALUES(?)", (username,))наself.c.execute("INSERT INTO users(user_id, username) VALUES(?,?)", (user_id, username))
