从django fabfile运行mysql查询

时间:2014-12-01 16:46:10

标签: django fabric

如何使用我的fab文件运行SQL查询,如下所示

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查询?我也不想从文本文件加载它。

1 个答案:

答案 0 :(得分:3)

你只是回应整个字符串。 但是你想要将第一部分回显到mysql的管道中。 删除最后一个"并将其放在;|之间。

第一行示例:

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