मैं किसी क्वेरी के परिणामों को तालिका में सम्मिलित करने का प्रयास कर रहा हूं, लेकिन परिणाम सेट में एक चर जोड़ें। मैंने कुछ इसी तरह के प्रश्नों को देखा है और मुझे लगता है कि मैं क्वेरी चर का सही ढंग से प्रतिनिधित्व कर रहा हूं लेकिन मुझे "वैश्विक चर परिभाषित नहीं किया गया" त्रुटि मिल रही है। क्या मुझे आपसे सही दिशा निर्देशन मिलेगा? मुझे लगता है कि इसे इस तथ्य से करना है कि मैं एक चर के साथ एक चयन कथन का प्रतिनिधित्व करने की कोशिश कर रहा हूं, लेकिन मुझे यकीन नहीं है कि वाक्यविन्यास कैसा दिखना चाहिए।

def main():
    datadump()
    d = datetime.date.today()
    queryCurs.execute('SELECT * FROM data ORDER BY ac')
    sqlresults = queryCurs.fetchall()
    x,y,z = sqlresults
    queryCurs.execute('INSERT INTO history VALUES (?,?,?,?)',
    (d, x, y, z))
    createDb.commit

धन्यवाद!

1
Lance Collins 8 अक्टूबर 2011, 20:23
ट्रेसबैक प्रदान किए बिना त्रुटियों के बारे में प्रश्न पूछना व्यर्थ है।
 – 
Cat Plus Plus
8 अक्टूबर 2011, 20:29
1
आपके टपल में (d, a, ac, am) है, लेकिन मुझे उनमें से कोई भी (d के अलावा) main() में कहीं भी परिभाषित नहीं दिख रहा है। यह शुरू करने के लिए एक अच्छी जगह की तरह लगता है।
 – 
eldarerathis
8 अक्टूबर 2011, 20:30
यहाँ त्रुटि है: NameError: वैश्विक नाम 'ए' परिभाषित नहीं है
 – 
Lance Collins
8 अक्टूबर 2011, 20:34
मैंने इसे परिभाषित नहीं करने का कारण यह है कि मैं डी, ए, एसी, एएम को सौंपे गए एसक्लरेसल्ट से परिणाम चाहता था। मैंने सोचा कि मुझे परिणाम सेट में जोड़ने वाले दिनांक चर के कारण ऐसा करना होगा।
 – 
Lance Collins
8 अक्टूबर 2011, 20:36

2 जवाब

सबसे बढ़िया उत्तर

ऐसा करने के लिए आपको दो SQL क्वेरी बनाने की आवश्यकता नहीं है। इसके बजाय, INSERT INTO ... SELECT ... फ़ॉर्म की INSERT क्वेरी का उपयोग करें:

conn=sqlite3.connect(...)
cursor=conn.cursor()

today = datetime.date.today()
sql='''
    INSERT INTO history
    SELECT ?, foo, bar, baz
    FROM data
    ORDER BY ac
'''
cursor.execute(sql,[today])
conn.commit()
2
unutbu 9 अक्टूबर 2011, 16:55

execute विधि कोई मान नहीं लौटाती। आपको fetchone या fetchall

2
haggai_e 8 अक्टूबर 2011, 21:24
मैंने भ्रूण विधि जोड़ा। हालांकि, मुझे प्रत्येक टुपल को क्वेरी परिणाम से इतिहास तालिका में प्राप्त करने और एक ही समय में तालिका में दिनांक जोड़ने का कोई तरीका नहीं मिल रहा है। जब मैं टुपल को अनपैक करता हूं और x, y, z को मान असाइन करता हूं तो मुझे एक त्रुटि मिलती है क्योंकि सभी विधि लाने से परिणाम 4 टुपल्स होते हैं। मैं शायद इस तरह से बहुत जटिल बना रहा हूं, लेकिन मैं केवल पहली क्वेरी से परिणाम दूसरी तालिका में प्राप्त करना चाहता हूं और प्रत्येक पंक्ति में एक तिथि जोड़ना चाहता हूं।
 – 
Lance Collins
8 अक्टूबर 2011, 23:01
1
खैर, स्वीकृत उत्तर ऐसा करने का एक शानदार तरीका प्रतीत होता है। यदि आपको पाइथन में पहले क्वेरी परिणामों को और संसाधित करने की आवश्यकता है, तो आपको fetchall द्वारा लौटाई गई सूची को संसाधित करने की आवश्यकता होगी, यानी लूप के लिए, और प्रत्येक टपल को एक अलग INSERT INTO क्वेरी के साथ डालें। आप एक ही कमांड में इंसर्शन क्वेरी को चलाने के लिए executemany का भी इस्तेमाल कर सकते हैं।
 – 
haggai_e
9 अक्टूबर 2011, 18:00