由于一些奇怪的原因,我无法从Python测试应用程序中的callproc调用中获得结果。MqSQL 5.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;
现在,使用PyCharm和Python 3.3,当调用这个存储过程时,我似乎无法检索到任何东西。这段代码让我得到了想要的结果。
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",尽管我只返回一个查询结果而不是多个结果集。MySQL Python连接器是否将对存储过程的执行调用视为一个双重查询?我怎样才能直接调用存储过程并得到我的结果?我真的不希望在我的代码中出现动态SQL。谢谢你的任何建议!