#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 как синтаксис «лишен акцента», но, по моему скромному мнению, в этом случае он довольно лаконичен.