Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.8k views
in Technique[技术] by (71.8m points)

python - mysql.connector issue with System Error : 32 Broken Pipe

I'm using library discord.py and i have issue with mysql.connector. I use mariadb database for server prefixes but when my bot runs 24/7, it starts throwing these errors

0|PyBot    |   File "/home/pi/.local/lib/python3.7/site-packages/discord/utils.py", line 329, in maybe_coroutine
0|PyBot    |     value = f(*args, **kwargs)
0|PyBot    |   File "/home/pi/PyBotV2/bot/main.py", line 11, in get_prefix
0|PyBot    |     return fetch_prefix(message.guild.id)
0|PyBot    |   File "/home/pi/PyBotV2/bot/cogs/database.py", line 15, in fetch_prefix
0|PyBot    |     cursor.execute(prefix_query, (gid,))
0|PyBot    |   File "/home/pi/.local/lib/python3.7/site-packages/mysql/connector/cursor.py", line 551, in execute
0|PyBot    |     self._handle_result(self._connection.cmd_query(stmt))
0|PyBot    |   File "/home/pi/.local/lib/python3.7/site-packages/mysql/connector/connection.py", line 490, in cmd_query
0|PyBot    |     result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
0|PyBot    |   File "/home/pi/.local/lib/python3.7/site-packages/mysql/connector/connection.py", line 261, in _send_cmd
0|PyBot    |     packet_number, compressed_packet_number)
0|PyBot    |   File "/home/pi/.local/lib/python3.7/site-packages/mysql/connector/network.py", line 143, in send_plain
0|PyBot    |     errno=2055, values=(self.get_address(), _strioerror(err)))
0|PyBot    | mysql.connector.errors.OperationalError: 2055: Lost connection to MySQL server at 'localhost:3306', system error: 32 Broken pipe

My code for DB connection:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="USERNAME",
    password="PASSWORD",
    database="discord_bot"
)

cursor = mydb.cursor()


def fetch_prefix(gid):
    prefix_query = "SELECT prefix FROM servers WHERE id = %s"
    cursor.execute(prefix_query, (gid,))
    prefix = cursor.fetchone()
    return prefix[0]

def add_prefix(gid, prefix = "."):
    prefix_query = "INSERT INTO servers(id, prefix) VALUES (%s, %s)"
    cursor.execute(prefix_query, (gid, prefix,))
    mydb.commit()

def remove_prefix(gid):
    prefix_query = "DELETE FROM servers WHERE id = %s"
    cursor.execute(prefix_query, (gid,))
    mydb.commit()

def update_prefix(gid, prefix):
    prefix_query = "UPDATE servers SET prefix = %s WHERE id = %s"
    cursor.execute(prefix_query, (prefix, gid, ))

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

A different solution using sqlite3

import sqlite3

path = "discord_bot.db"
conn = sqlite3.connect(path)
cursor = conn.cursor()

def database_interaction(data):
    cursor.execute("SQL Script", (data,))
    result = cursor.fetchone()
    return result[0]

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...