मैं अपने sqlite3 डीबी के साथ कस्टम उपसर्ग उपयोग लागू कर रहा था। जब भी मैं उपसर्ग का उपयोग करने का प्रयास करता हूं तो मुझे यह त्रुटि मिलती है:

Traceback (most recent call last):
  File "C:\Users\achut\AppData\Roaming\Python\Python39\site-packages\discord\client.py", line 333, in _run_event
    await coro(*args, **kwargs)
  File "C:\Users\achut\AppData\Roaming\Python\Python39\site-packages\discord\ext\commands\bot.py", line 943, in on_message
    await self.process_commands(message)
  File "C:\Users\achut\AppData\Roaming\Python\Python39\site-packages\discord\ext\commands\bot.py", line 939, in process_commands
    ctx = await self.get_context(message)
  File "C:\Users\achut\AppData\Roaming\Python\Python39\site-packages\discord\ext\commands\bot.py", line 876, in get_context
    raise TypeError("Iterable command_prefix or list returned from get_prefix must "
TypeError: Iterable command_prefix or list returned from get_prefix must contain only strings, not Cursor

कोड की रेखा जिसके साथ यह त्रुटि मिलती है वह यह है:

def get_prefix(bot, message):
    prefix = cursor.execute(f"SELECT prefix FROM guilds WHERE serverid = {message.guild.id}")
    return when_mentioned_or(current_prefix)(bot, message)

मैंने इस तरह की चीजें करने की कोशिश की है लेकिन फिर बॉट उपसर्ग का जवाब नहीं देता है:

def get_prefix(bot, message):
    prefix = cursor.execute(f"SELECT prefix FROM guilds WHERE serverid = {message.guild.id}")
    prefix = str(prefix)
    return when_mentioned_or(current_prefix)(bot, message)

और इस:

def get_prefix(bot, message):
    prefix = cursor.execute(f"SELECT prefix FROM guilds WHERE serverid = {message.guild.id}")
    return when_mentioned_or(str(current_prefix))(bot, message)

और इस:

def get_prefix(bot, message):
    prefix = cursor.execute(f"SELECT prefix FROM guilds WHERE serverid = {message.guild.id}")
    return when_mentioned_or(f"{current_prefix}")(bot, message)

धन्यवाद!!!

1
PythonProgrammer 1 जिंदा 2021, 04:24

1 उत्तर

सबसे बढ़िया उत्तर

Cursor.execute() एक कर्सर ऑब्जेक्ट देता है। वास्तव में कर्सर से परिणाम प्राप्त करने के लिए, आपको cursor.fetchone() या cursor.fetchall() विधियों को जोड़ना होगा।

fetchone() परिणाम को टपल में लौटा देगा, इसलिए आपको उक्त टपल से उपसर्ग निकालने की आवश्यकता होगी।

fetchall() टुपल्स की सूची लौटाएगा।

...
prefix = cursor.fetchone()[0]

संदर्भ:

1
Diggy. 1 जिंदा 2021, 04:48