Python MySQL.connector-MySQL连接不可用

Python MySQL.connector-MySQL连接不可用,python,mysql,Python,Mysql,我目前正在从事一个Python项目,该项目有时需要一个接一个地向DB写入数千个条目。不幸的是,我经常遇到连接错误 起初,我认为这是因为我没有在每次查询后关闭DB连接,但是消息出现在DB中的第一个条目之后。否则,错误会在几百个条目之后出现。当我打电话给DB时,我做错了什么 class Database (): def __init__(self): pass def connect(self, log): try: self

我目前正在从事一个Python项目,该项目有时需要一个接一个地向DB写入数千个条目。不幸的是,我经常遇到连接错误

起初,我认为这是因为我没有在每次查询后关闭DB连接,但是消息出现在DB中的第一个条目之后。否则,错误会在几百个条目之后出现。当我打电话给DB时,我做错了什么

class Database ():
    def __init__(self):
        pass

    def connect(self, log):
        try:
            self.conn = mysql.connector.connect(host=self.Adress,
                                                port=self.Port,
                                                database=self.Database,
                                                user=self.Username,
                                                password=self.Password)
        except Exception as e:
            log.bootLog(self, "Database Connection ---- FAILED: " + str(e), "Error")
            sys.exit(0)
        return

    def insert(self, query, args, log):
        cursor = self.conn.cursor()
        try:
            cursor.execute(query, args)
            self.conn.commit()
            cursor.close()
            self.conn.close()
        except Exception as e:
            log.writeLog(self, "Database Connection ---- FAILED: " + str(e) + "\n" + cursor.statement, "Error")
        return

我的初步想法如下:

1-MySQL不使用游标,因此您不必担心关闭游标

2-每次插入后是否需要提交?最好是两次批处理插入和每100次插入提交一次,我不知道每毫秒提交一次事务是否会导致表锁定或其他问题

3-您绝对不需要在每次交易后关闭连接。如果不确定一个事务进入的频率,我可能会在关闭该事务之前进行睡眠(5)或其他操作,以便在另一个事务进入时保持打开状态。数千次打开和关闭与db的连接可能对性能不是很好

4-您听说过连接池吗?这可能会解决你大部分的麻烦。它让python打开一个连接池并使用它们,然后根据需要自行关闭它们


我不知道这是否是您的问题的原因,但我也会关闭
块中的
self.conn
。或者将
self.conn.close()
移动到
最后一个块。或者使用连接作为上下文管理器,如果您使用的是最新的
mysql connector python
包。我会在构建过程中打开连接一次(
\uuuuuu init\uuuuu
),如果您需要,您可以添加一个
\uuu del\uuu
方法来显式关闭连接,但是如果您的
数据库
实例正在被垃圾收集,那么连接实例也将被垃圾收集并关闭。谢谢您的建议。目前我正在测试一些更改。非常感谢您的建议。我已经实现了它的一部分,我正在做第一次测试。您将如何通过提交来实现这一点?您会运行一个提交所有100个插入的计数器吗?
Traceback (most recent call last):
  File "/home/tobi/PycharmProjects/TradingBot/Module/brokerAPI.py", line 27, in initialisierung
    tradingBot.Database.insert(query,args, tradingBot.log)
  File "/home/tobi/PycharmProjects/TradingBot/Module/MySQLConnector.py", line 32, in insert
    cursor = self.conn.cursor()
  File "/home/tobi/PycharmProjects/TradingBot/venv/lib/python3.7/site-packages/mysql/connector/connection.py", line 809, in cursor
    raise errors.OperationalError("MySQL Connection not available.")
mysql.connector.errors.OperationalError: MySQL Connection not available.