jquery SQLITE数据库更新请求无效

xzlaal3s  于 2022-12-18  发布在  jQuery
关注(0)|答案(1)|浏览(119)

我有一个机器人,我做了一个循环检查,如果服务器已作出更改,如名称或成员数量,但请求不更新我的数据库。
我没有任何错误消息。并尝试如果请求是发送我有2打印和在终端“你好”出现,但我的数据库没有更新。
代码:
Main.py:

@bot.event
async def on_ready() -> None:
    print ("Bot is ready !")
    print (f"Logged into {bot.user.name}")
    print (f"ID : {bot.user.id}")
    get_serv_info.start()

@tasks.loop()
async def get_serv_info() -> None:
    for server in bot.guilds:

        server_name = server.name
        server_id = server.id
        nb_member = server.member_count
    try:
        database_handler.update_server(server_id, server_name, nb_member)
        print("hello")
    except:
        print("hi")

    await asyncio.sleep(10)

数据库处理程序.py:

def update_server(self, server_name : str, server_id : str, nb_member : str):
        cursor = self.connect.cursor()
        query = f"UPDATE Servers SET server_name = ?, nb_member = ? WHERE server_id = ?;"
        cursor.execute(query, (server_name, nb_member, server_id))
        cursor.close()
        self.connect.commit()
6yt4nkrj

6yt4nkrj1#

根据它们的名称,看起来你传递参数的顺序不对,这可能意味着你在server_id上没有得到匹配,或者你会以意想不到的方式改变你的数据。
交换server_idnb_member,使它们与查询中的顺序匹配:

query = f"UPDATE Servers SET server_name = ?, nb_member = ? WHERE server_id = ?;"
cursor.execute(
    query, (
        server_name,  # First parameter
        nb_member,    # Second parameter
        server_id,    # Third parameter
    )
)

或者,您可以通过传入dict来使用命名占位符:

query = """UPDATE Servers
           SET server_name = :server_name,
               nb_member = :nb_member
           WHERE server_id = :server_id;"""

cursor.execute(
    query,
    {
        "server_name": server_name,
        "server_id": server_id,
        "nb_member": nb_member,
    }
)

这允许你以任意顺序传入参数,也有助于清晰度,尤其是当你处理的参数数量很多的时候。

相关问题