簡體   English   中英

將存儲過程結果存儲在數據幀中時,MySql 命令不同步

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM