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

dyi*_*uck 2 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()
Run Code Online (Sandbox Code Playgroud)

跑步给出:

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.
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这一问题?其他论坛有类似的错误并通过没有太多游标打开来修复问题,但这是第一次调用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()
Run Code Online (Sandbox Code Playgroud)

Vas*_*802 15

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


e18*_*18r 8

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

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()
Run Code Online (Sandbox Code Playgroud)


VIS*_*SQL 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
Run Code Online (Sandbox Code Playgroud)

当我尝试做,z = mysql_get_mydb()y = z.cursor()提出错误y = z.cursor().这是您列出的确切错误.您还可以通过打开连接,关闭它,然后尝试在其上定义游标来测试它.希望这个评论有助于某人.这里的修复是最后一个应该包含return cnx(并且cnx.close()应该删除)

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