2012-02-16 9 views
11

मैं Python (v1.2.3 विंडोज पाइथन 2.7 के लिए precompiled बाइनरी) के लिए MySQLdb मॉड्यूल का उपयोग कर रहा हूं, एक MySQL डेटाबेस में डेटा पढ़ने और लिखने के लिए । एक बार कनेक्शन खुलने के बाद, मैं उसी कनेक्शन पर डेटाबेस में किए गए परिवर्तनों का निरीक्षण करने के लिए उस कनेक्शन का उपयोग कर सकता हूं, लेकिन किसी अन्य कनेक्शन का उपयोग करके किए गए परिवर्तनों को न देखें, भले ही अन्य कनेक्शन पायथन में बनाया गया हो या कोई बदलाव हो MySQL कमांड लाइन क्लाइंट। इस मामले में जहां मैं पायथन का उपयोग कर अद्यतन कर रहा हूं, ध्यान दें कि मैं कनेक्शन पर प्रतिबद्ध() कमांड चला रहा हूं। प्रोग्राम है जो एक VARCHAR स्तंभ के साथ एक परीक्षण तालिका में नए रिकॉर्ड सम्मिलित करता है कीMySQL-Python कनेक्शन परिवर्तन के बाद भी किसी अन्य कनेक्शन पर किए गए डेटाबेस में परिवर्तन नहीं देखता है

उदाहरण:

import MySQLdb 

conn = MySQLdb.connect("localhost", "test", "test", "test") 
c = conn.cursor() 
c.execute("INSERT INTO test VALUES(%s)", ("Test",)) 
conn.commit() 
c.close() 
conn.close() 

कार्यक्रम है कि एक निरंतर रिकॉर्ड गिनती मुद्रण समाप्त होता है का उदाहरण (बजाय सबसे अप करने की तारीख रिकॉर्ड मुद्रण की गिनती)। मैं केवल SELECT कथन चलाए जाने पर स्क्रिप्ट को मारने और फिर से चलाने या फिर एक नया कनेक्शन खोलकर गिनती को अपडेट करने में सक्षम हूं।

import MySQLdb 

conn = MySQLdb.connect("localhost", "test", "test", "test") 

while True: 
    input = raw_input("Enter anything: ") 
    if input == "exit": 
     break 

    c = conn.cursor() 
    c.execute("SELECT COUNT(*) FROM test") 
    res = c.fetchone()[0] 
    c.close() 

    print("Number of records: %d" % res) 

उत्तर

5

इस

import MySQLdb 
import time 

from MySQLdb.cursors import SSCursor 
conn = MySQLdb.connect("localhost", "test", "test", "test") 


while True: 
    input = raw_input("Enter anything: ") 
    if input == "exit": 
     break 
    c = conn.cursor() 
    conn.begin() 
    c.execute("SELECT COUNT(*) FROM test") 
    res = c.fetchone()[0] 
    #c.commit() 
    c.close() 

    print("Number of records: %d" % res) 

cursor की परिभाषा का प्रयास कर रहा है कि वह अपने परिवर्तन जब तक डाटा स्टोर होगा। तो आपको कर्सर को begin आईएनजी या commit अपने कनेक्शन में संकेत देना होगा। यह कर्सर को सूचित करेगा कि आपको डेटाबेस से नया डेटा पढ़ना होगा।

आशा है कि यह आपकी क्वेरी को हल करेगा।

हम आपके प्रश्न से नई चीजें भी सीखते हैं :)।

+2

'अस्वीकरण चेतावनी: शुरू() गैर-मानक है और 1.3' –

+1

में हटा दिया जाएगा 'conn.begin()' टिप्पणी करें और' conn.commit() 'को अपूर्ण करें। यह भी काम करेगा। – Nilesh

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

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