2015-11-06 2 views
5

मैं pymysql.cursors और एक सरल कोड उदाहरण है कि एक मेज से एक पंक्ति लोड करता है और यह हर दूसरे है प्रिंट उपयोग कर रहा हूँ:PyMySQL स्पष्ट रूप से पुराना/स्नैपशॉट मान लौटा रहा है/क्वेरी को पुन: प्रयास नहीं कर रहा है?

#!/usr/bin/env python3 
import pymysql.cursors 
import time 

conn = pymysql.connect(host='localhost', 
    # credentials etc. 
    cursorclass=pymysql.cursors.DictCursor) 

while True: 
    with conn.cursor() as cursor: 
     cursor.execute("SELECT * FROM state limit 1;") 
     vals = cursor.fetchone() 
     print (vals) 
     time.sleep(1) 

राज्य एक MariaDB डेटाबेस में एक ही पंक्ति के साथ एक मेज है।

अब जब यह एक MySQL क्लाइंट को फायर करता है और तालिका की सामग्री को बदलता है, तो यह स्क्रिप्ट मैरीली मूल मूल्य को पंप कर रखती है; यानी यह स्पष्ट रूप से डेटाबेस (!) से परामर्श नहीं कर रहा है।

मैं पाइथन के लिए नया हूं और मैं निश्चित रूप से PyMySQL के लिए नया हूं, इसलिए अगर यह एक कठोर सवाल है तो apols लेकिन मेरे पास RTM थोड़ा सा है और यह अजीब लग रहा है।

+0

आप अपने MySQL ग्राहक में अपने परिवर्तन करने से कर रहे हैं? – Andy

+0

हां, मेरे ग्राहक ऑटोोकॉमिट्स और मैंने इसका परीक्षण किया है। – artfulrobot

उत्तर

4

मैं क्यों इस के लिए आवश्यक है समझ में नहीं आता है, लेकिन आप या तो

  1. connect() मापदंडों में autocommit=True जोड़ा जा रहा है उसे ठीक कर सकते।

  2. cursor.execute() कमांड के बाद conn.commit() पर कॉल करना।

लगता है कि यह एक स्नैपशॉट या डिफ़ॉल्ट रूप से कुछ लेनदेन शुरू करता है। I (घबराहट!) ने pymysql repo पर issue सबमिट किया, क्योंकि मैंने यहां कुछ भी नहीं सुना होगा। यह तुरंत स्पष्टीकरण

साथ बंद हो गया किसी को भी कुछ autocommit मुझे पता है का उपयोग कर की तुलना में बेहतर जानता है यह repeatable read

है।

+0

धन्यवाद। यह मेरा दिन बचाया। – Strabek

संबंधित मुद्दे