Как создать столбцы таблицы sqlite3 из списка? (на python)

#python #sqlite

#python #sqlite

Вопрос:

Я пытаюсь создать столбцы таблицы в соответствии с запросом пользователя (размер списка может измениться, поэтому я не могу определить точное количество вопросительных знаков):

 userInput=[a,b,c,d,e,f,g]
ct.execute('CREATE TABLE IF NOT EXISTS chars(?)',(userInput))
  

Я получаю следующую ошибку:

 sqlite3.OperationalError: near "?": syntax error
  

Комментарии:

1. какой SQL-запрос вы ожидаете получить? где у вас есть имена столбцов и типы столбцов. Я не уверен, но ? ожидает только один элемент, но у вас много элементов.

2. Я еще не запрашивал, пытался добавить типы, и это не помогло. Размер списка может измениться, поэтому я не могу определить точное количество вопросительных знаков.

3. возможно, сначала сгенерируйте одну строку с именами столбцов и типами столбцов, а затем используйте ее в качестве отдельного аргумента в запросе.

4. Есть ли какой-либо разумный способ сделать это, кроме создания цикла, который объединяет строку вопросительных знаков (?,?,?,?,?…) с частями аргумента в целом?

5. Вы не можете передавать структурные компоненты, такие как имена столбцов, в качестве параметров, только значения данных, обычно в WHERE , ON , VALUES() и IN() предложениях. Вам нужно будет объединить значения списка в строку SQL.

Ответ №1:

Чтобы ответить на ваш вопрос, мы проигнорируем проблемы безопасности. Я предполагаю, что вы хотите создать (нетипизированные) столбцы в соответствии с вашим списком python.

 CREATE TABLE chars (a,b,c,d,e,f,g)
  

Вот мое предложение:

 userInput=['a','b','c','d','e','f','g']
q = "CREATE TABLE IF NOT EXISTS chars(%s)" % ", ".join(userInput)
  

(Обратите внимание, что имена столбцов должны быть заключены в кавычки в соответствии с синтаксисом строковых литералов Python).

Можно утверждать, что %s как синтаксис «лишен акцента», но, по моему скромному мнению, в этом случае он довольно лаконичен.