2017-08-11 74 views
2

所以我有一個問題非常類似this question,但有點不同。使用Python和mySQL(和Windows作爲操作系統),cursor.execute()返回沒有結果,但它連接

我打電話給cursor.execute(sqlString)在一塊sql上工作正常,當我直接在mysql工作臺上運行它。當我運行代碼但是我沒有得到結果集。

我有完全相同的問題症狀,如鏈接中所述,我試過鏈接解決方案,但事實證明,我沒有同樣的問題。

返回時my _stored_results []爲空。

我使用try/except塊中的代碼,我有另一個python程序,它使用相同的代碼將csv加載到我的mySQL數據庫中,並且它可以工作。

我遇到問題的代碼是在@ app.route中,如果有任何不同之處。

我的代碼如下所示:

def functionName() : 
    try: 
     import mysql.connector 
     from mysql.connector import errorcode 

     cnx = mysql.connector.connect(user=init["dbDetails"][0], password=init["dbDetails"][1], host=init["dbDetails"][2], database=init["dbDetails"][3]) 
     cur = cnx.cursor() 
     cur.close()   #I deffo don't need the two lines below but they were added for a sanity check, just to make sure the cur was not being read from any other code. 
     cur = cnx.cursor() # and this one obviously 

     sqlString = 'CALL `schemaName`.`getProcedureName_sp`(1, 1, 0)' 
     cur.execute(sqlString, multi=True) # tried it here without the multi=True and got the msg telling me to use it. 

     getSomeDetails = cur.fetchall() 

     cnx.commit() # probably don't need to commit here I am just reading from the dB but I am trying anything as I have no idea what my issue might be. 

     return render_template('success.html')   

    except Exception as e: 
     return render_template('error.html', error = str(e)) 
    finally: 
     cur.close() 
     cnx.close() 

我很困惑,因爲我有相同的代碼在幾個地方工作。

回答

0

因此,我用頭撞牆,當我無法到達任何地方時,我只是決定離開它繼續前進,然後以一種全新的心態回來。那麼...它的工作,有點。

所以我還沒有找到解決方案,但我找到了解決這個問題的解決方法,甚至可以對我的代碼中實際發生的情況提供一些信息。

我決定,因爲fetchall()方法是什麼導致我的麻煩,我應該儘量規避它。

我在調用fetchall()方法之前探測了遊標(cur),並看到cur._rows包含來自SQL調用的結果。

所以我改了行

getSomeDetails = cur.fetchall() 

if len(cur._rows) > 0 : 
    getSomeDetails = list(cur._rows[0]) #I only ever expect one result in this query 

#getSomeDetails should now have the row I am looking for 
getSomeDetails[0] #gets me the field I am looking for 

,現在我的變量getSomeDetails已經從過程調用

的返回值然而,它們不是在很好的格式我應該從fetchall()函數中獲得它們,所以我必須做一些處理,我必須確保我得到了一些值,並且我注意到這些值是r在一個元組中剔除

我在兩臺運行兩個不同的操作系統和兩個不同版本的python(Windows 7 Python 2.7和Windows 10 Python 3)的兩臺不同機器上遇到過這兩個代碼片段,我使用了兩個不同的MySQL庫,所以實際的修復代碼在兩種情況下都略有不同,但現在我已經在兩種情況下都將數據從我的數據庫獲取到Python中的變量中,所以這很酷。

但是,這是一個黑客攻擊,我意識到這一點,我寧願使用正確的函數cur.fetchall(),所以我仍然接受有關可能會出錯的建議。

相關問題