首页 > 解决方案 > sqlite3.OperationalError:靠近“<”:语法错误

问题描述

第 115 行,添加 self.cursor.execute(f'UPDATE GuildTable SET GUILD_NAME = {str(guild_name_msg)} WHERE GUILD_IDS = {ctx.guild.id}') sqlite3.OperationalError: near "<": 语法错误

self.cursor.execute(f'UPDATE GuildTable SET GUILD_NAME = {str(guild_name_msg)} WHERE GUILD_IDS = {ctx.guild.id}')

sqlite3.OperationalError:靠近“<”:语法错误

我应该怎么办?

        try:                
            guild_name_msg = await self.bot.wait_for('message', check=check, timeout=30)

            self.cursor.execute(f"SELECT GUILD_NAME FROM GuildTable WHERE GUILD_IDS = {ctx.guild.id}")                
            result = self.cursor.fetchone()
            if result is None:
                self.cursor.execute(f'INSERT INTO GuildTable(GUILD_NAME) VALUES({str(guild_name_msg)})')
            elif result is not None:
                self.cursor.execute(f'UPDATE GuildTable SET GUILD_NAME = {str(guild_name_msg)} WHERE GUILD_IDS = {ctx.guild.id}')
                    
            self.db.commit()
            self.cursor.close()
            self.db.close()

标签: pythonsqlpython-3.xdiscord.py

解决方案


try:
    guild_name_msg = await self.bot.wait_for('message', check=check, timeout=30)

    self.cursor.execute(f"SELECT GUILD_NAME FROM GuildTable WHERE GUILD_IDS = :guild_id", {"guild_id": ctx.guild.id})
    result = self.cursor.fetchone()
    if result is None:
        self.cursor.execute(f'INSERT INTO GuildTable(GUILD_NAME) VALUES (?)',guild_name_msg)
    elif result is not None:
        self.cursor.execute(
            f'UPDATE GuildTable SET GUILD_NAME = :guild_name_msg WHERE GUILD_IDS = :guild_id',{"guild_id":ctx.guild.id,"guild_name_msg":guild_name_msg})

    self.db.commit()
    self.cursor.close()
    self.db.close()

我认为您的错误是它所做的第一件事是组合字符串,这些字符串在 SQL 中运行不佳,但是如果您在 dict 或元组中传递值,SQLite 会理解它应该将它们用作值在数据库中


推荐阅读