[英]MySql Commands out of sync when storing stored procedure result in dataframe
我正在嘗試通過調用存儲過程將數據從 MySql 數據庫導入到 Pandas 數據框中。
但是我收到以下錯誤,在拋出異常后我不明白它似乎數據實際上在數據幀中。 那么我怎樣才能擺脫這個異常呢?
import pandas as pd
from sqlalchemy import create_engine
import_data_query = "CALL my_scheme.my_procedure(NULL);"
connection_string = "mysql+mysqlconnector://***:***@localhost/my_scheme"
engine = create_engine(connection_string)
df = pd.read_sql_query(sql=import_data_query, con=engine)
engine.dispose()
我得到的例外:
Exception during reset or similar
Traceback (most recent call last):
File "C:\Users\*\anaconda3\lib\site-packages\sqlalchemy\pool\base.py", line 693, in _finalize_fairy
fairy._reset(pool)
File "C:\Users\*\anaconda3\lib\site-packages\sqlalchemy\pool\base.py", line 880, in _reset
pool._dialect.do_rollback(self)
File "C:\Users\*\anaconda3\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 2302, in do_rollback
dbapi_connection.rollback()
File "C:\Users\*\anaconda3\lib\site-packages\mysql\connector\connection_cext.py", line 386, in rollback
self._cmysql.rollback()
_mysql_connector.MySQLInterfaceError: Commands out of sync; you can't run this command now
對於存儲過程,您需要根據SQLAlchemy 文檔使用連接對象來訪問callproc
:
conn = engine.raw_connection()
cur = conn.cursor()
res = cur.callproc("my_procedure", args=(None,)) # None SHOULD TRANSLATE AS NULL
df = pd.DataFrame(results, columns = [i[0] for i in res.description])
或者,直接與 DB-API 接口,這里是MySQL.connector
:
import mysql.connector
myconn = mysql.connector.connect(host='localhost', database='mydatabase',
user='***', password='***')
mycur = myconn.cursor()
results = mycur.callproc("my_procedure", args=(None,))
df = pd.DataFrame(results, columns=[i[0] for i in results.description])
mycur.close()
myconn.close()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.