Z jakiegoś dziwnego powodu nie mogę uzyskać wyników z wywołania metody callproc w aplikacji testowej Python. Procedura przechowywana w MqSQL 5.2.47 wygląda następująco:Nie można zwrócić wyników z procedury przechowywanej przy użyciu kursora Python
Teraz, używając pycharm z Python 3.3, nie mogę nic zdają się odzyskać po wywołaniu tej procedury przechowywanej. Ten kod pobiera mi pożądanych rezultatów:
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()
ale ten kod albo cursor.fetchall() lub() 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()
... zwraca „mysql.connector. errors.InterfaceError: Brak ustawionego wyniku pobierania. " Jest dodatkowy dziwne zachowanie przy użyciu metody cursor.execute() tak jak ...
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()
... bo to daje „mysql.connector.errors.InterfaceError Use cmd_query_iter do sprawozdania z wieloma zapytaniami”, a następnie "mysql.connector.errors.InterfaceError: Użyj multi = True podczas wykonywania wielu instrukcji" pomimo faktu, że zwracam tylko jeden wynik zapytania zamiast wielu zestawów wyników. Czy złącze MySQL Python traktuje wywołanie execute w procedurze przechowywanej jako podwójne zapytanie? Jak mogę po prostu wywołać procedurę przechowywaną i odzyskać wyniki? Naprawdę nie chcę dynamicznego SQL w moim kodzie. Z góry dziękuję za radę!
nie byłoby to więcej niż składni SQL serwera MySQL? –
Ponieważ nie jest to poprawne polecenie w PL/SQL MySQL. Jest to poprawne polecenie dla SQL-a T-SQL, ale to nie jest to, czego używam w tym projekcie. Składnia MySQL do wywoływania procedur przechowywanych to 'call proc_name ([arguments])'. – gfish3000