【问题标题】:cursor() raise errors.OperationalError("MySQL Connection not available.") OperationalError: MySQL Connection not availablecursor() raise errors.OperationalError("MySQL Connection not available.") OperationalError: MySQL Connection not available
【发布时间】:2015-02-16 17:27:37
【问题描述】:
import requests
import time
import csv
import ast
import sys
import mysql.connector

config = {
'user': 'root',
'password': 'password',
'host': '127.0.0.1',
'port': '3306',
'database': 'dbname',
'raise_on_warnings': True,}

cnx = mysql.connector.connect(config)    
cursor = cnx.cursor()

跑步给出:

Traceback (most recent call last):
  File "/home/ubuntu/scrapers/xrp2.py", line 17, in <module>
    cursor = cnx.cursor()
  File "/usr/local/lib/python2.7/dist-packages/mysql/connector/connection.py", line 1383, in cursor
    raise errors.OperationalError("MySQL Connection not available.")
OperationalError: MySQL Connection not available.

有谁知道如何解决这个问题?其他论坛也有类似的错误,并通过没有打开太多游标来解决问题,但这是第一次调用cursor(),所以我不确定为什么它不可用。我需要从 Ubuntu 终端关闭 MySQL 吗?

我的配置文件可以通过 Sequel Pro 的 SSH 正常连接。

已解决:将配置放入 .connect(statement) 而不是字典。

import requests
import mysql.connector

cnx = mysql.connector.connect(user ='root', password= 'p', host = '127.0.0.1',port='3306', database='coindb')

cursor = cnx.cursor()

【问题讨论】:

  • 你确定你的配置有正确的值吗?
  • 要跟进@kartikg3 的评论,您是否确认您拥有正确的主机名、端口、用户名、密码等?
  • 通常,您可以通过创建答案并将其标记为已解决来解决自己的问题。

标签: python mysql-connector mysql-connector-python


【解决方案1】:

比你的更优雅的解决方案:

import requests
import time
import csv
import ast
import sys
import mysql.connector

config = {
'user': 'root',
'password': 'password',
'host': '127.0.0.1',
'port': '3306',
'database': 'dbname',
'raise_on_warnings': True,}

cnx = mysql.connector.connect(**config)    
cursor = cnx.cursor()

【讨论】:

    【解决方案2】:

    如果您的连接已关闭,则会发生此错误。在 Try-Except-Else 块中,如果没有被 except 捕获的错误,Else 总是被执行。

    因此,这段代码立即关闭了我的连接:

    def mysql_get_mydb():
        '''Takes no args, and returns a connection to MYDB via MYSQL.'''
    
        creds = fixed_data.MYSQL_ENDPOINTS
    
        try:
            cnx = connector.connect(user='MYDB',
                                  password='open_sesame',
                                  host=creds['prod']['MYDB'][0],
                                    port=3306,
                                  database='MYDB')
        except connector.Error as err:
            if err.errno == connector.errorcode.ER_ACCESS_DENIED_ERROR:
                print("Something is wrong with your user name or password")
            elif err.errno == errorcode.ER_BAD_DV_ERROR:
                print("Database does not exist")
            else:
                print(err)
        # the else will happen if there was no error!
        else:
            cnx.close()
    
        return cnx
    

    当我尝试执行z = mysql_get_mydb()y = z.cursor() 时,y = z.cursor() 会引发错误。这是您列出的确切错误。您还可以通过打开连接、关闭连接、然后尝试在其上定义光标来进行测试。希望此评论对某人有所帮助。这里的修复是最后一个 else 应该包含return cnx(并且应该删除cnx.close()

    【讨论】:

    • 我想每个人都只是复制/粘贴 mysql 连接器教程上的示例,没有过多介绍其逻辑,只是假设引发的错误是打印(错误),不是连接关闭,而是尝试使用光标。这很愚蠢,但每个人都这样做。僵尸程序员;p
    【解决方案3】:

    不要将单独的字典设置为“config”,只需将其放在 cnx 语句中(它将适用于 python 3):

    cnx = mysql.connector.connect('user': 'root',
    'password': 'password',
    'host': '127.0.0.1',
    'port': '3306',
    'database': 'dbname',
    'raise_on_warnings': True) 
    

    【讨论】:

      【解决方案4】:

      尝试添加这一行:cnx.reconnect() 在使用光标之前。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-01
        • 1970-01-01
        • 2022-12-01
        • 1970-01-01
        • 2022-12-02
        • 2017-07-11
        • 1970-01-01
        • 2022-12-01
        相关资源
        最近更新 更多