cursor()引发errors.OperationalError(“MySQL连接不可用。”)OperationalError:MySQL Connection不可用

时间:2014-12-18 01:39:16

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

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(语句)而不是字典。

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()

5 个答案:

答案 0 :(得分:5)

如果您的连接已关闭,则会发生此错误。在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()会引发错误。这是您列出的确切错误。您还可以通过打开连接,关闭它,然后尝试在其上定义游标来测试它。希望这个评论有助于某人。这里的修复是最后一个应包含return cnx(并且应删除cnx.close()

答案 1 :(得分:3)

比您更优雅的解决方案:

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 :(得分:0)

我有同样的问题。它输出“MySQL Connection not available”。当我使用python2解释器时,当我使用python3解释器时它是可以的

import sys
from dbfpy import dbf
import mysql.connector


def main():        
    mysqldb=mysql.connector.connect(host="127.0.0.1", user="advert", password="advert", database="adverts")


    try:
        mysqlcursor = mysqldb.cursor()
        ...

答案 3 :(得分:0)

不要将单独的字典设置为“ 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 :(得分:0)

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