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

运行给出:

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

4 回答 4

11

如果您的连接已关闭,则会发生此错误。在 Try-Except-Else 块中,如果没有被异常捕获的错误,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()并且. 这是您列出的确切错误。您也可以通过打开连接、关闭连接、然后尝试在其上定义光标来进行测试。希望此评论对某人有所帮助。这里的修复是最后一个 else 应该包含(并且应该删除)y = z.cursor()y = z.cursor()return cnxcnx.close()

于 2017-06-15T22:06:03.263 回答
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()
于 2015-02-27T17:54:39.463 回答
5

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

于 2021-03-16T22:28:36.923 回答
-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) 
于 2018-09-26T09:08:24.730 回答