我正在尝试使用子进程和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。
发布于 2014-04-05 10:32:34
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')请记住评论中提到的安全含义。
https://stackoverflow.com/questions/22826243
复制相似问题