奇妙な理由で、Pythonテストアプリでcallproc呼び出しの結果を取得できません。MqSQL5.2.47のストアドプロシージャは次のようになります。
CREATE PROCEDURE `mytestdb`.`getperson` (IN personid INT)
BEGIN
select person.person_id,
person.person_fname,
person.person_mi,
person.person_lname,
person.persongender_id,
person.personjob_id
from person
where person.person_id = personid;
END
さて、Python 3.3でPyCharmを使用すると、このストアドプロシージャを呼び出すときに何も取得できないようです。このコードは私に望ましい結果をもたらします:
import mysql.connector
cnx = mysql.connector.connect(user='root', host='127.0.0.1', database='mytestdb')
cnx._open_connection()
cursor = cnx.cursor()
cursor.execute("select * from person where person.person_id = 1")
people = cursor.fetchall()
for person in people:
print(person)
cnx.close()
しかし、cursor.fetchall()またはcursor.fetchone()のいずれかを使用したこのコード...
import mysql.connector
cnx = mysql.connector.connect(user='root', host='127.0.0.1', database='mytestdb')
cnx._open_connection()
cursor = cnx.cursor()
cursor.callproc("getperson", [1])
people = cursor.fetchall()
for person in people:
print(person)
cnx.close()
...「mysql.connector.errors.InterfaceError:フェッチ元の結果セットがありません」を返します。次のようなcursor.execute()メソッドを使用した追加の奇妙な動作があります...
import mysql.connector
cnx = mysql.connector.connect(user='root', host='127.0.0.1', database='mytestdb')
cnx._open_connection()
cursor = cnx.cursor()
cursor.execute("call getperson(1)")
people = cursor.fetchall()
for person in people:
print(person)
cnx.close()
...「mysql.connector.errors.InterfaceError:複数のクエリを含むステートメントにcmd_query_iterを使用する」、続いて「mysql.connector.errors.InterfaceError:複数のステートメントを実行するときにmulti=Trueを使用する」が生成されるため複数の結果セットではなく、1つのクエリ結果のみを返します。MySQL Pythonコネクタは、ストアドプロシージャの実行呼び出しを二重クエリとして扱いますか?ストアドプロシージャを呼び出して結果を取り戻すにはどうすればよいですか?コードに動的SQLを含めたくありません。アドバイスをありがとう!