2016-07-13 62 views
0

我想從光標讀取部分結果,然後關閉它而不讀取所有結果。 cursor.close()引發InternalError: Unread result found.是否可以在不重複所有結果的情況下關閉遊標或使用緩衝區選項Python mysql.connector InternalError:關閉光標時發現未讀結果

更新:

我查詢獲得約3000條記錄,我的目標是獲得第幾個記錄其符合一定的條件。在遍歷部分結果後,我得到我想要的。然後,我想放棄未讀的結果。我不使用緩衝選項,我知道它會立即讀取所有結果。這個問題不重複的Python MySQL connector - unread result found when using fetchone

def chooseInstrumentsFromOrigin(self, time): 
    sql = """select symbol, name, total_ratio, outstanding_ratio from market_values 
      where time = %s order by {captype} asc""".format(captype=self.strategy_data['captype']) 

    args = [time] 

    conn = mysql.connector.connect(**mysql_config) 
    cursor = conn.cursor(dictionary=True) 
    cursor.execute(sql, args) 

    # This function will return half way. 
    symbols = self.chooseInstrumentsFromLeaders(time, cursor) 

    # I don't want this line! 
    for i in cursor: pass 

    cursor.close() 
    conn.close() 

    return symbols 
+0

[Python的MySQL的連接器 - 未讀結果使用fetchone時發現]的可能的複製(http://stackoverflow.com/questions/29772337/python-mysql- connector-unread-result-found-when-using-fetchone) – shivsn

+0

@shivsn它不是重複的。請參閱我的更新。 – gzc

+0

顯示您的代碼。 – Drew

回答

1

這樣看來,你需要:

cursor = conn.cursor(buffered=True,dictionary=true) 

以放棄一個結果中流。

完全公開,我是一個mysql開發人員,而不是一個python開發人員。

請參閱Python手冊頁碼MySQLConnection.cursor() Methodcursor.MySQLCursorBuffered Class

所有行都立即被讀取,爲true。對於小到中等尺寸的結果集有幻想。

後者參考上面的狀態:

For queries executed using a buffered cursor, row-fetching methods such as fetchone() return rows from the set of buffered rows. For nonbuffered cursors, rows are not fetched from the server until a row-fetching method is called. In this case, you must be sure to fetch all rows of the result set before executing any other statements on the same connection, or an InternalError (Unread result found) exception will be raised.

作爲一個側面說明,您可以通過使用分頁修改你的策略。 MySQL的LIMIT clause支持這種與偏移,pageSize的設置:

[LIMIT {[offset,] row_count | row_count OFFSET offset}] 
+0

但我不想從服務器獲取左邊的行。也許提取前100行就足夠了。 – gzc

+0

沒有什麼像mysql'....限制偏移量,pageSize'分頁。 '[LIMIT {[offset,] row_count | row_count OFFSET offset}]'...'LIMIT 100' – Drew

+0

所以你的答案是不可能的,我必須使用緩衝選項。在這一點上,這個問題實際上是重複的。 – gzc