सबसे पहले, जैसा कि यहां बताया गया है:वैध SQL कॉलम नाम की जांच करेंए>
यह पोस्टग्रे दस्तावेज़ से आता है, लेकिन चूंकि पोस्टग्रे "आदर्श" एसक्यूएल सिंटैक्स के बहुत करीब है, यह MySQL के लिए समान हो सकता है ... इसलिए कॉलम नामों में कोई कोष्ठक नहीं, कोई रिक्त स्थान नहीं...
और दूसरी बात, कॉलम नाम स्ट्रिंग नहीं हैं :
निम्नलिखित सिंटैक्स मान्य है:
CREATE TABLE (test VARCHAR(100) NOT NULL, ...)
और निम्नलिखित अमान्य है और एक सिंटैक्स त्रुटि फेंक देगा:
CREATE TABLE ('test' VARCHAR(100) NOT NULL, ...)
जब आप '%s' संशोधक का उपयोग करते हैं, तो यह डेटा को STRING के रूप में पार्स करता है। इसलिए यह इसे उद्धरणों से घेरता है, जो अमान्य है...
तो अपनी तालिका बनाने के लिए, मैं एक "लूप के लिए" का सुझाव देता हूं जो डेटा को मान्य करता है (regexpr के साथ), और सहानुभूतिपूर्वक इसे स्ट्रिंग में जोड़ें:
import re
# ...
query = "CREATE TABLE test (ID INT AUTO_INCREMENT,name VARCHAR(50)"
for c in columnames:
if (re.search(r"^[A-Za-z][A-Za-z0-9_]*$", c) query += c + ", FLOAT" #this regex validate string if it begins with alphabetic char (upper or lower case), and if the others characters are alphanumeric, or are underscores
else raise SyntaxError("Invalid Column name!!") #If not, we raise a syntax error
query += ");"
और फिर आप अपनी टेबल बना सकते हैं :)