首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用子进程测试与MySQL的连接

问使用子进程测试与MySQL的连接
EN

Stack Overflow用户
提问于 2014-04-03 01:34:54
回答 1查看 2.5K关注 0票数 1

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

这就是我所拥有的:

代码语言:javascript
复制
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将挂起等待进一步的提示,但我希望它退出,以便我可以发出以下命令:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-05 10:32:34

来自使用Connector/Python连接到MySQL

代码语言:javascript
复制
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命令:

代码语言:javascript
复制
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')

请记住评论中提到的安全含义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22826243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档