gpt4 book ai didi

python - 使用子进程通过 Python 测试与 MySQL 的连接

转载 作者:行者123 更新时间:2023-11-30 23:03:35 24 4
gpt4 key购买 nike

我正在尝试使用子进程和 Bash 命令在我的 Python 脚本中测试与 MySQL 的连接。在尝试连接和发送更多 MySQL 命令之前,我想确保用户提供的密码是正确的。我知道我可以通过导入 MySQLdb 轻松地做到这一点,但我想了解如何进行这项工作。

这是我的:

root_password = getpass.getpass("Enter the password of the database root user: ")
try:
subprocess.check_call("mysql -u root -p%s" % root_password, shell=True, stdout=open('/dev/null', 'w'), stderr=subprocess.STDOUT)
except:
print "Incorrect password provided."

当密码正确时,stdin 挂起等待进一步提示,但我希望它退出,以便我可以发出此命令:

mysql_cmd = 'mysql -u root -p{0} -Bse "CREATE DATABASE {1}; CREATE USER {2}@localhost IDENTIFIED BY \'{3}\'; GRANT SELECT, CREATE, INSERT, UPDATE, DELETE, ALTER, DROP, LOCK TABLES ON {1}.* TO {2}@localhost IDENTIFIED BY \'{3}\'; FLUSH PRIVILEGES;"'.format(root_password, database_name, database_user, database_password)
subprocess.call(mysql_cmd, shell=True, stdout=open('/dev/null', 'w'), stderr=subprocess.STDOUT)

是的,你猜对了;我正在尝试将 Bash 脚本转换为 Python。

最佳答案

来自 Connecting to MySQL Using Connector/Python :

import mysql.connector
from mysql.connector import errorcode

try:
conn = mysql.connector.connect(user='root', password=password,
database='test') # MySQL 4.1+
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:
conn.close()

如果 mysql 命令在密码正确时显示提示,那么您可以使用 Popen.communicate() 发送 exit 命令:

from subprocess import Popen, PIPE, DEVNULL, STDOUT

p = Popen(["mysql", "-u", "root", "-p", password],
stdin=PIPE, stdout=DEVNULL, stderr=STDOUT)
p.communicate(b"exit")
if p.returncode != 0:
print('incorrect password')

请记住 the comments 中提到的安全隐患.

关于python - 使用子进程通过 Python 测试与 MySQL 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22826243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com