Проблема при написании бота для дискорда с использованием бд

Ошибка: File "C:\Users\User\Desktop\bot\maintest.py", line 55, in on_ready

`cursor.execute("SELECT `ID` FROM `users` WHERE `ID`= {member.id}")#проверка, существует ли     участник в БД`
sqlite3.OperationalError: unrecognized token: "{"

Пробовал без "{}", но уже другая ошибка: sqlite3.OperationalError: no such column: member.id

55 строка: cursor.execute("SELECT `ID` FROM `users` WHERE `ID`= {member.id}")#проверка, существует ли участник в БД Полный код:


import discord
import requests
import json
import random
import sqlite3
import tabulate

# ПОДГРУЗКА 

from discord.ext import commands
from config import settings
from tabulate import tabulate
from sqlite3 import Error
con = sqlite3.connect('cursedsoul.db')
cursor = con.cursor()

# SQL

# def sql_connection():
 
#    try:
 
#        con = sqlite3.connect('cursedsoul.db')
 
#        return con
 
#    except Error:
 
#        print(Error)
 
#def sql_table(con):
 
#    cursor.execute("CREATE TABLE users(ID integer PRIMARY KEY, DISCORD text, SOULS integer)")
 
#    con.commit()
 
#con = sql_connection()
 
#sql_table(con)


# ТЕЛО

client = discord.Client()
bot = commands.Bot(command_prefix="!")

@client.event
async def on_ready():
    print('Бот {0.user} запущен!'.format(client))
    for guild in client.guilds:#т.к. бот для одного сервера, то и цикл выводит один сервер
        print(guild.id)#вывод id сервера
        for member in guild.members:#цикл, обрабатывающий список участников
            cursor.execute("SELECT `ID` FROM `users` WHERE `ID`= {member.id}")#проверка, существует ли участник в БД
            if cursor.fetchone()==None:#Если не существует
                cursor.execute("INSERT INTO `users` (`ID`,`DISCORD`,`SOULS`) VALUES (? ? ?), (member.id, <@member.id>, 0)") #вводит все данные об участнике в БД

            else:#если существует
                pass
            con.commit()#применение изменений в БД

@client.event
async def on_disconnect():
    print('Бот {0.user} завершил работу!'.format(client))

async def on_member_join(member):
    cursor.execute("SELECT `ID` FROM `users` WHERE `ID`={member.id}")#все также, существует ли участник в БД
    if cursor.fetchone()==None:#Если не существует
        cursor.execute("INSERT INTO `users` (`ID`,`DISCORD`,`SOULS`) VALUES (? ? ?), ({member.id}, <@{member.id}>, 0)")

    else: #Если существует
        pass
    con.commit()#применение изменений в БД

# СООБЩЕНИЯ

@bot.command()
async def info(ctx): #команда _account (где "_", ваш префикс указаный в начале)
    table=[["ID","DISCORD","SOULS"]]
    for row in cursor.execute("SELECT `ID`, `DISCORD`, `SOULS` FROM `users` WHERE `ID`= {ctx.author.id}"):
        table.append([row[0],row[1],row[2]])
        await ctx.send(">\n{tabulate(table)}")

# con.close() Разрываем подключение.
client.run("secret")```

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

Автор решения: Be3y4uu_K0T

Для передачи параметров в запрос используйте аргумент parameters для sqlite3.Cursor.execute.

cursor.execute("INSERT INTO users (ID, DISCORD, SOULS) VALUES (?, ?, ?)", (member.id, member.mention, 0))

вместо:

cursor.execute("INSERT INTO `users` (`ID`,`DISCORD`,`SOULS`) VALUES (? ? ?), ({member.id}, <@{member.id}>, 0)")
→ Ссылка