まず、ここで説明するように:有効なSQL列名を確認します
これはPostGredocからのものですが、PostGreは「理想的な」SQL構文に非常に近いため、mysqlでも同じである可能性があります...したがって、列名に括弧やスペースはありません...
次に、列名は文字列ではありません :
次の構文が有効です:
CREATE TABLE (test VARCHAR(100) NOT NULL, ...)
そして、次のものは無効であり、構文エラーをスローします:
CREATE TABLE ('test' VARCHAR(100) NOT NULL, ...)
'%s'修飾子を使用すると、データがSTRINGとして解析されます。そのため、引用符で囲みますが、これは無効です...
したがって、テーブルを作成するには、(regexprを使用して)データを検証する「forループ」を提案し、それを文字列に単純に追加します。
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 += ");"
そして、テーブルを作成できます:)