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()
答案 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()
在使用光标之前。