私は、ストアドプロシージャを作成して実行する.sqlファイルを持っています。 .sqlファイルの構造は次のようである:これは、次のようにシェルから実行された場合os.system()またはsubprocess.Popen()を使用してPythonから呼び出されたときにMySQLストアドプロシージャが実行されないのはなぜですか?
delimiter $$
drop procedure if exists `myProcedure`$$
create procedure `myProcedure` (
input INT
)
BEGIN
... sql statements;
END $$
call myProcedure(10);
$$
、ストアドプロシージャが作成され、最後にcall
文が正常に実行されます。私はPythonスクリプトから上記のコマンドを実行したときに
mysql -uuser -ppassword -hhost db_name < mysql_proc.sql
しかし、最後にcall
文が実行されていません。これは私が私のPythonスクリプトで上記のコマンドを実行しています方法です:
command = 'mysql -uuser -ppassword -hhost db_name < mysql_proc.sql'
mysql_cmd_proc = subprocess.Popen(command,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout_val, stderr_val = mysql_cmd_proc.communicate()
print 'mysql command stdout: %s' % stdout_val
print 'mysql command stderr: %s' % stderr_val
エラーまたは出力はありません(stdout_val
とstderr_val
はちょうど空の文字列で)戻りました。私はcall myProcedure(10); $$
をBEGIN
とEND $$
ブロックで囲んでみましたが、どちらも役に立ちませんでした。これが問題になる理由は何ですか?