discord.py:MySQL '光标未连接'
Posted
技术标签:
【中文标题】discord.py:MySQL \'光标未连接\'【英文标题】:discord.py: MySQL 'Cursor is not connected'discord.py:MySQL '光标未连接' 【发布时间】:2021-07-25 07:11:18 【问题描述】:我试图在踢公会成员之前将数据存储在我的本地数据库中。 我在另一个文件中设置了数据库。我在另一个文件中调用 kick 函数。 我注意到有时它会起作用,但当我再次这样做时,它就不再起作用了。
我的代码:
# Database.py
import os
import mysql.connector
from dotenv import load_dotenv
load_dotenv()
def modlog_db_connex():
class ModLogDB:
def __init__(self, connection, mycursor):
self.connection = connection
self.mycursor = mycursor
modlog_db = mysql.connector.connect(
host=os.getenv("DB_HOST"),
user=os.getenv("DB_USERNAME"),
password=os.getenv("DB_PASSWORD"),
database=os.getenv("DB_NAME"),
use_unicode=True
)
mycursor = modlog_db.cursor()
return ModLogDB(modlog_db, mycursor)
# Kick.py
import discord
import GlobalSupport
import Database
moderator_above = GlobalSupport.moderator_above
modlog_db = Database.modlog_db_connex()
async def kick(client, ctx, member, reason):
author_id = ctx.author.id
log_channel = GlobalSupport.moderation_logs
if any(role.id in moderator_above for role in ctx.author.roles) and author_id != int(member.id):
if reason is None:
reason = "None provided."
sql = "INSERT INTO RLH_Cases_v2 (UserID, ModeratorID, CaseType, Reason) VALUES (%s, %s, %s, %s)"
val = (str(member.id), str(ctx.author.id), "Kick", reason)
modlog_db.mycursor.execute(sql, val)
modlog_db.connection.commit()
case_id = str(modlog_db.mycursor.lastrowid)
modlog_db.connection.close()
# ...
错误:
Traceback (most recent call last):
File "C:\Users\user\Desktop\Team Stuff (TS, DC, MC)\RLH\Programming\OnMessage.py Rewrite\Commands\Kick.py", line 31, in kick
modlog_db.mycursor.execute(sql, val)
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\mysql\connector\cursor_cext.py", line 242, in execute
raise errors.ProgrammingError("Cursor is not connected", 2055)
mysql.connector.errors.ProgrammingError: 2055: Cursor is not connected
【问题讨论】:
【参考方案1】:每次启动后,您都将关闭与 MySQL 数据库的连接,并且在再次调用 kick 之前不要重新连接。
【讨论】:
我通过调用这个函数来做:modlog_db = Database.modlog_db_connex()
是的,但它不在您的 async def kick
函数中。如果您从另一个文件调用 Kick.kick,则每次之后它都不会重新连接到数据库。以上是关于discord.py:MySQL '光标未连接'的主要内容,如果未能解决你的问题,请参考以下文章