निम्नलिखित तर्क mysqldb मॉड्यूल (python mysqldb multiple cursors for one connection देखें) के साथ काम करता है, लेकिन मैं (SQL)पायथन MySQL कनेक्टर कर्सर लूप के भीतर दूसरे एसक्यूएल कथन निष्पादित करता है?
cursor2.execute पर mysql.connector साथ निम्न त्रुटि हो रही है "अपठित परिणाम नहीं मिला।"
मुझे एहसास है कि मैं इन 2 साधारण एसक्यूएल स्टेटमेंट्स को गठबंधन करने के लिए एक दूसरे का उपयोग कर सकता हूं और दूसरे कर्सर की आवश्यकता से बच सकता हूं, लेकिन मेरा असली दुनिया उदाहरण अधिक जटिल है और उसे दूसरा एसक्यूएल स्टेटमेंट चाहिए।
मान लीजिए कि मुझे 2 अलग एसक्यूएल स्टेटमेंट्स (लूप के लिए 1 और लूप के अंदर 1) निष्पादित करने की आवश्यकता है, यह mysql.connector मॉड्यूल के साथ कैसे किया जाना चाहिए?
import datetime
import mysql.connector
db = mysql.connector.connect(user='alan', password='please', host='machine1', database='mydb')
cursor1 = db.cursor()
cursor2 = db.cursor()
sql = """
SELECT userid,
username,
date
FROM user
WHERE date BETWEEN %s AND %s
"""
start_date = datetime.date(1999, 1, 1)
end_date = datetime.date(2014, 12, 31)
cursor1.execute(sql, (start_date, end_date))
for (userid, username, date) in cursor1:
sql = """
select count(*)
from request
where assigned = '%s'
""" % (userid)
cursor2.execute(sql)
requestcount = cursor2.fetchone()[0]
print userid, requestcount
cursor2.close()
cursor1.close()
db.close()
यह mysqldb संस्करण बस ठीक काम करता है:
import datetime
import MySQLdb
db = MySQLdb.connect(user='alan', passwd='please', host='machine1', db='mydb')
cursor1 = db.cursor()
cursor2 = db.cursor()
sql = """
SELECT userid,
username,
date
FROM user
WHERE date BETWEEN %s AND %s
"""
start_date = datetime.date(1999, 1, 1)
end_date = datetime.date(2014, 12, 31)
cursor1.execute(sql, (start_date, end_date))
for (userid, username, date) in cursor1:
sql = """
select count(*)
from request
where assigned = '%s'
""" % (userid)
cursor2.execute(sql)
requestcount = cursor2.fetchone()[0]
print userid, requestcount
cursor2.close()
cursor1.close()
db.close()
धन्यवाद गीर्ट! डिफ़ॉल्ट रूप से buffered और non-buffered के बीच व्यापार-बंद निर्णय क्या है? एक उपयोगकर्ता परिप्रेक्ष्य से, यह mysqldb नकल करने के लिए अच्छा लगता है? – panofish
आईएमएचओ, बहुत सारे डेटा लाने पर डिफ़ॉल्ट रूप से नहीं-बफरिंग सुरक्षित है। जब मुझे पता चलेगा कि केवल छोटे परिणाम होंगे, मैं बफरिंग चालू करता हूं। यह कनेक्टर/पायथन में नहीं बदलेगा। – geertjanvdk
फिर से धन्यवाद गीर्ट! बस समझना चाहता था। :) – panofish