2014-12-01 66 views
3

如何運行SQL查詢與我的晶圓廠文件,如下運行MySQL查詢fabfile

def allow_webservers_for_db(): 

    for ip in env.web_servers: 
     run('echo "GRANT ALL ON %s.* TO \'%s\'@\'%s\' IDENTIFIED BY \'%s\'; | mysql --user=%s --password=%s"' % (env.db_schema, env.db_web_user, ip, env.db_password, env.db_user, env.db_password), pty=True) 
     run('echo "UPDATE db SET host=\'%s\' where db=\'%s\'; | mysql --user=%s --password=%s --database=mysql"' % (ip, env.db_schema, env.db_web_user, env.db_password), pty=True) 
     run('echo "UPDATE user SET host=\'%s\' where user=\'%s\';| mysql --user=%s --password=%s --database=mysql"' % (ip, env.db_web_user, env.db_user, env.db_password), pty=True) 

代碼運行沒有錯誤,但沒有做它必須做的。如果我將echo生成的代碼複製並粘貼到mysql終端mysql>查詢運行正常。

我在這裏錯過了什麼?反正有沒有更好地運行mysql查詢?我不想從文本文件加載它。

回答

3

你只是迴應整個字符串。 但是你想要將第一部分回覆到mysql的管道。 刪除最後的"並將其放置在;|之間。

示例第一行:

run('echo "GRANT ALL ON %s.* TO \'%s\'@\'%s\' IDENTIFIED BY \'%s\';" | mysql --user=%s --password=%s' ....