безопасный способ создать таблицу sqlite3 в python - PullRequest
3 голосов
/ 30 ноября 2010

Для вставки в стол безопасным способом является

c.execute("insert into table (?,?,?,...)",my_tuple)

Но как безопасно создать таблицу? Я пробовал что-то вроде этого:

conn = sqlite3.connect(database)
c = conn.cursor()
cmd = "create table ? (? text,? text)"
my_tuple = ("my_table","first","second")
c.execute(cmd,my_tuple)

но я получаю такие ошибки:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
sqlite3.OperationalError: near "?": syntax error

Должен ли я просто собрать строку в python и бросить ее в sqlite для создания таблицы?

Ответы [ 2 ]

2 голосов
/ 23 ноября 2012

Этот ответ на похожий вопрос может помочь https://stackoverflow.com/a/3247553/1709198

Там ответчик подумал, что невозможно назвать таблицы с помощью метода вопросительного знака, и вместо этого предложил способ «дезинфицировать» входные данные, определив функцию для «очистки» входных данных, которая будет удалять такие вещи, как )(][;,, чтобы не могу попытаться добавить SQL-код, например ); drop tables --, чтобы все испортилось.

Я также не знаю, как заставить метод вопросительного знака работать с именами таблиц, и я думаю, что этот метод 'sanitize the string' почти так же хорош, как он получает.

2 голосов
/ 30 ноября 2010

Если вы просто пытаетесь импортировать CSV-файлы и предполагаете, что они не отправляются вам неким пользователем, который может попытаться связываться с вашей базой данных , просто соберите его вместе в Python:

"create table %s (%s text,%s text)" % ("my_table","first","second")

Если существует вероятность того, что электронные таблицы могут быть получены от злонамеренного пользователя, то вам нужно беспокоиться о том, чтобы очистить имена столбцов / файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...