SQLite

2010-07-19 14 views
5

में डालने के दौरान डुप्लिकेट की जांच करना मैं पाइथन का उपयोग कर SQLite डेटाबेस में डेटा डालने का प्रयास कर रहा हूं।SQLite

INSERT INTO DATA_TABLE(UID,LABEL) VALUES (NULL, "UK") 
    WHERE "UK" NOT EXISTS IN (SELECT LABEL FROM DATA_TABLE); 

इस क्वेरी गतिशील अजगर से उत्पन्न होता है और मैं जाँच कर रहा हूँ कि क्या तारीख पहले से ही है डालने और उसके SQLite डेटाबेस में काम नहीं कर रहा से पहले तालिका में मौजूद हैं। यह near "WHERE": syntax error त्रुटि प्राप्त करना।

क्या मैं कुछ गलत कर रहा हूं?

आपकी मदद के लिए धन्यवाद।

उत्तर

2

मुझे पूरा यकीन है कि INSERT में WHERE क्लॉज (the documentation doesn't mention any) नहीं है। आप क्या कर सकते हैं:

  • LABEL
  • उपयोग INSERT OR FAIL
  • पर एक अद्वितीय सूचकांक बनाने कि अगर एक त्रुटि से चलाता है, पंक्ति पहले से मौजूद है।
+1

हां, मुझे इसके बारे में पता नहीं था। धन्यवाद :) – ukanth

2

यह आपको एक वाक्यविन्यास त्रुटि दे रहा है क्योंकि यह allowed syntax नहीं है। अपने उदाहरण से मुझे लगता है स्कीमा शायद है:

जिसमें
create table data_table (uid integer primary key autoincrement. 
    label string); 

मामले primary keyunique निकलता है। लेकिन, जब से तुम uid के ऑटो पीढ़ी की अनुमति देते हैं तो आप परवाह नहीं है कि यह क्या मूल्य है है, तो आप सिर्फ नकल label रों जिस स्थिति में आप वास्तव में परवाह है कि label अद्वितीय होना नहीं चाहते हैं तो तो यह बता:

create table data_table (uid integer primary key autoincrement, 
    label string unique on conflict fail); 

जो तब काम करता है के रूप में उम्मीद:

sqlite> insert into data_table (label) values ("uk"); 
sqlite> insert into data_table (label) values ("uk"); 
Error: column label is not unique 
sqlite> select * from data_table; 
1|uk 

संयोग से, अगर नाम data_table, uid, और label इस सवाल तो आप और अधिक सार्थक नामों का उपयोग करना, क्योंकि ये बुरी uninformative हैं के प्रयोजनों के लिए उदाहरण के नाम नहीं हैं।

+0

धन्यवाद @msw, यह सच है। नाम सिर्फ उदाहरण हैं, मैं लेबल को अद्वितीय के रूप में उपयोग कर रहा हूं। – ukanth

1
INSERT INTO DATA_TABLE(UID,LABEL) VALUES (NULL, "UK") 
WHERE NOT EXISTS(SELECT 1 FROM DATA_TABLE WHERE LABEL="UK"); 

आप इसका उपयोग INSERT या FAIL के बजाय कर सकते हैं।

+0

यह "त्रुटि: पास" कह रहा है ": वाक्यविन्यास त्रुटि" – Harsha