注 - 如MaxU下面所示,此問題特定於mysql.connector,如果您使用pymysql,則不會發生此問題。希望這可以爲其他人省去一些頭疼的問題MySQL存儲過程,熊貓和「執行多個語句時使用multi = True」
使用Python,Pandas和mySQL並且無法讓存儲過程返回結果,更不用說進入數據框了。
我不斷收到關於多個查詢的錯誤,但是我運行的存儲過程是非常簡單的參數驅動查詢。
不要緊,我使用的存儲過程,它始終是相同的結果
事實上,下面(sp_test對它)的試驗方法與下面的查詢 -
select * from users;
如果我運行與
df=pd.read_sql("select * from users", cnx,index_col=None, coerce_float=True)
而不是
df=pd.read_sql("call sp_test()", cnx,index_col=None, coerce_float=True)
相同的語句
它工作正常,即使sp_test對它是SELECT * FROM用戶
爲什麼我不斷收到多=真錯誤信息,如何去解決這個問題,並讓我的存儲過程的結果?我不明白簡單的select語句將如何返回多個結果集。
如果還有其他方法可以做到這一點,高興地嘗試它。
以下是簡單的代碼,我使用
import pandas as pd
from pandas.io.data import DataReader
from pandas import DataFrame
import mysql.connector
cnx = mysql.connector.connect(user='jeff', password='password', database='testdatabase', host='xx.xxx.xxx.xx')
df=pd.read_sql("call sp_test()", cnx,index_col=None, coerce_float=True)
當我到pd.read_sql,我收到以下錯誤消息
InterfaceError Traceback (most recent call last)
C:\Users\User\AppData\Local\Continuum\Anaconda3\lib\site- packages\mysql\connector\cursor.py in execute(self, operation, params, multi)
506 try:
--> 507 self._handle_result(self._connection.cmd_query(stmt))
508 except errors.InterfaceError:
C:\Users\User\AppData\Local\Continuum\Anaconda3\lib\site-packages\mysql\connector\connection.py in cmd_query(self, query)
725 raise errors.InterfaceError(
--> 726 'Use cmd_query_iter for statements with multiple queries.')
727
InterfaceError: Use cmd_query_iter for statements with multiple queries.
During handling of the above exception, another exception occurred:
InterfaceError Traceback (most recent call last)
C:\Users\User\AppData\Local\Continuum\Anaconda3\lib\site- packages\pandas\io\sql.py in execute(self, *args, **kwargs)
1563 else:
-> 1564 cur.execute(*args)
1565 return cur
C:\Users\User\AppData\Local\Continuum\Anaconda3\lib\site- packages\mysql\connector\cursor.py in execute(self, operation, params, multi)
510 raise errors.InterfaceError(
--> 511 "Use multi=True when executing multiple statements")
512 raise
InterfaceError: Use multi=True when executing multiple statements
你有沒有試過pd.read_sql_query()? –
是的,同樣的錯誤 –
@Jeff,嘗試'pd.read_sql(「call sp_test();」,...)'(注意分號)。除此之外,我會嘗試運行它使用不同的MySQL Python模塊,例如'pymysql'(這是用於內部熊貓測試)... – MaxU