何らかの奇妙な理由により、私はPythonテストアプリケーションでcallproc呼び出しから結果を得ることができません。 MqSQL 5.2.47でストアドプロシージャは、次のようになります。Pythonの3.3とPyCharmを使用して、今すぐPythonのカーソルを使用してストアドプロシージャの結果を返すことができません
、私はこのストアドプロシージャを呼び出すときに何かを取得するように見えることはできません。 ...
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をしたくありません。アドバイスをありがとう!
はそれは、MySQLよりもSQLサーバーの構文のよりと思いませんか? –
これは、MySQLのPL/SQLで有効なコマンドではないためです。 SQL ServerのT-SQLには有効なコマンドですが、これは私がこのプロジェクトで使用しているコマンドではありません。ストアドプロシージャを呼び出すためのMySQLの構文は 'call proc_name([arguments])'です。 – gfish3000