Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过Python检查给定的MySQL服务器连接?_Python_Mysql - Fatal编程技术网

如何通过Python检查给定的MySQL服务器连接?

如何通过Python检查给定的MySQL服务器连接?,python,mysql,Python,Mysql,总之,我试图通过Python验证给定MySQL服务器的连接性,提供主机、用户名、密码和模式。我尝试使用子流程模块,例如 subprocess.check_call(['mysql', '-u', 'root']) 但它会在终端中启动mysql,这不是我想要的。我还尝试了mysqldb,但它不支持python3+ 有没有办法通过Python测试MySQL服务器的参数?至少我想知道它是否连接。如果我能知道更多关于连接失败的细节,那就更好了 谢谢 你可以用这样的东西。带有连接参数的配置文件和带有错误

总之,我试图通过Python验证给定MySQL服务器的连接性,提供主机、用户名、密码和模式。我尝试使用子流程模块,例如

subprocess.check_call(['mysql', '-u', 'root'])
但它会在终端中启动mysql,这不是我想要的。我还尝试了mysqldb,但它不支持python3+

有没有办法通过Python测试MySQL服务器的参数?至少我想知道它是否连接。如果我能知道更多关于连接失败的细节,那就更好了


谢谢

你可以用这样的东西。带有连接参数的配置文件和带有错误检查的try语句

创建一个名为config.py的文件

config = {
  'user': 'username',
  'password': 'password',
  'host': 'host_name or ip',
  'database': 'database',
  'raise_on_warnings': True,
}
使用mysql.connenctor

try:
   cnx = mysql.connector.connect(**config)

   cursor = cnx.cursor()

        query = ("select statement")         

        cursor.execute(query)

   cursor.close()
   cnx.close()

except mysql.connector.Error as err:
   if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
        print("Something is wrong with your user name or password")
   elif err.errno == errorcode.ER_BAD_DB_ERROR:
        print("Database does not exists")
   else:
        print(err)
else:
   cnx.close()
用法示例:

>>> print(MySQLCheck(host="localhost", user="root", password="pass"))
(2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection refused)")
>>> # Later, when I started the server:
(1045, "Access denied for user 'root'@'localhost' (Using password: YES)")
>>> # Later, when I started MySQL server with "--skip-grant-tables" option:
(('information_schema',), ('drupal',), ('forum',), ('mysql',), ('p
性能(模式),(phpmyadmin),(插件),(测试),)

请注意,如果一切正常并执行了查询,MySQLCheck()的返回值可能是异常或元组

要在Ubuntu/Debian上安装PyMySQL for Python3,请执行以下操作:

$ sudo apt-get install python3-setuptools
$ sudo easy_install3 pip
$ sudo pip3.2 install PyMySQL
我希望这是您需要的答案。

根据,您可以查看Python 3.3+

如果您确实想使用subprocess,可以添加“-e”标志以在mysql中执行命令

subprocess.check_call(['mysql', '-u', 'root', '-ppass', '-e', "show databases;"])

我想我会试试PyMySQL,我不确定你的代码是什么,但我试过了,效果不太好。我真正想知道的是,MySQL服务器的给定参数是否有效,即是否连接。谢谢。这就是一个例子。今天晚些时候我将生成一些工作代码并发布。我现在很忙。你试过PyMSQL而不是MySQLdb吗?它应该有用。@jackyey!PyMySQL在Python3上工作没有问题。事实上,它有一个Python3版本。我完全编辑了我的答案,并提供了我认为您需要的代码。祝你好运它是否同时支持Python2.x和Python3.x?请参阅。是的,两者都支持。语法可能与3.x略有不同。
subprocess.check_call(['mysql', '-u', 'root', '-ppass', '-e', "show databases;"])