2013-02-15 56 views
10

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

INSERT INTO wiki.pages (changed,content,meta,attachment,revision,page,editor) 
VALUES (:changed,:content,:meta,:attachment,:revision,:page,:editor) 

{ 
    u'changed': '2013-02-15 16:31:49', 
    u'content': 'Testing', 
    u'meta': None, 
    u'attachment': None,  
    u'revision': 2, 
    u'page': u'FrontPage', 
    u'editor': 'Anonymous' 
} 

यह निम्न त्रुटि के साथ विफल:

keys = ','.join(current.keys()) 
params = [':' + x for x in current.keys()] 
values = ','.join(params) 

query = "INSERT INTO wiki.pages (%s) Values (%s)" % (keys, values) 
query = query.encode('utf-8') 
cursor.execute(query, current) 

क्वेरी और वर्तमान के लिए डेटा है

cql.apivalues.ProgrammingError: 
Bad Request: line 1:123 no viable alternative at input 'None' 

उत्तर

13

"कोई व्यवहार्य विकल्प" का मतलब है कि कुछ प्रमुख के लिए डेटा प्रकार उस कॉलम परिवार कॉलम के लिए स्कीमा से मेल नहीं खाता है, दुर्भाग्यवश यह स्पष्ट रूप से त्रुटि संदेश में नहीं कहता है।

मेरे मामले में मेटा के लिए डेटा प्रकार था:

map<text,text> 

इस कारण कोई भी के लिए प्रविष्टि समय में एक बुरा मूल्य माना जाता था।

if current['meta'] is None: 
    current['meta'] = dict() 

CQL चालक एक नक्शे के प्रकार के लिए नए मूल्य के रूप में खाली dict ठीक स्वीकार करता है, जबकि कोई भी अनुमति नहीं है, भले ही नक्शा स्तंभ की क्वेरी: मैं डालने से पहले एक खाली dict साथ कोई नहीं बदल कर समस्या तय अगर यह खाली है तो कोई नहीं लौटाता है।

रिटर्निंग कोई नहीं और स्वीकार नहीं करना कोई भी सहज महसूस नहीं करता है, इसलिए बाद में मैंने कर्सर.फेटचोन() के लिए कस्टम रैपर बनाने का निर्णय लिया जो कॉलम की सूची के बजाय कॉलम का नक्शा देता है, और यह भी जांचता है कि मैपटाइप, लिस्ट टाइप या SetType कोई नहीं लौटा दिया है। यदि कोई भी मूल्य नहीं है, तो यह उन्हें कसंड्रा में संशोधित डेटा डालने के दौरान मेरे जैसे मुद्दों से बचने के लिए खाली dict(), सूची() या सेट() के साथ बदल देता है। यह अच्छी तरह से काम करता प्रतीत होता है।

+3

एफडब्ल्यूआईडब्ल्यू, "कोई व्यवहार्य विकल्प" तकनीकी रूप से एक पार्स त्रुटि नहीं है, एक प्रकार त्रुटि नहीं है। – jbellis

+2

@jbellis ने जो कहा, उसे जोड़ने के लिए, यह आमतौर पर मेरे साथ होता है जब मैं कई लाइनों (मेरे तैयार बयानों के लिए) स्ट्रिंग स्थिरांक को जोड़ रहा हूं और मैं यह सुनिश्चित करना भूल जाता हूं कि मेरे पहचानकर्ताओं/कीवर्ड के दोनों तरफ एक जगह है। उदाहरण के लिए, 'चयन करें * tablenameWHERE foo =?' से कोई व्यवहार्य विकल्प नहीं होगा: foo' क्योंकि यह 'WHERE' कीवर्ड और पहचानकर्ता नहीं था। (अच्छा होगा अगर यह संकेत करता था कि यह क्या उम्मीद कर रहा था।) –

+1

एफडब्ल्यूआईडब्ल्यू, "कोई व्यवहार्य विकल्प" एएनटीएलआर से आता है, इसलिए यदि आपको खोदने की जरूरत है, तो एएनटीएलआर व्याकरण को पकड़ें। – Jus12

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

  • कोई संबंधित समस्या नहीं^_^