Вопрос: Возможно ли использовать переменную в качестве имени таблицы без использования конструкторов строк?Имя переменной таблицы в sqlite
Информация:
Я работаю над проектом прямо сейчас, что каталоги данных из звезд моделирования шахты. Для этого я загружаю все данные в базу данных sqlite. Он работает очень хорошо, но я решил добавить намного большую гибкость, эффективность и удобство использования в свой db. Я планирую позже добавлять планету к моделированию и хотел бы иметь таблицу для каждой звезды. Таким образом, мне не нужно было бы запрашивать таблицу из 20 млн. Планетарных частиц для 1-4к в каждой солнечной системе.
Мне сказали, что использование конструкторов строк плохо, потому что оно оставляет меня уязвимым для атаки SQL-инъекции. Хотя это не так уж и важно, поскольку я единственный человек, имеющий доступ к этим dbs, я хотел бы следовать лучшим практикам. И также, если я делаю проект с аналогичной ситуацией, когда он открыт для публики, я знаю, что делать.
В настоящее время я делаю это:
cursor.execute("CREATE TABLE StarFrame"+self.name+" (etc etc)")
Это работает, но я хотел бы сделать что-то подобное:
cursor.execute("CREATE TABLE StarFrame(?) (etc etc)",self.name)
, хотя я понимаю, что это, вероятно, будет невозможно. хотя я бы согласиться на что-то вроде
cursor.execute("CREATE TABLE (?) (etc etc)",self.name)
Если это вообще не возможно, я приму этот ответ, но если кто-нибудь знает способ сделать это, не сказать. :)
Я кодирую в python.
Так что это невозможно. Это то, что мне нужно было знать. И ваш предложенный метод скраба выглядит очень хорошо. Благодаря! – Narcolapser
Лично я бы выбрал исключение, если вместо этого появятся такие символы. Их не должно быть, поэтому что-то не так, и я бы предпочел узнать об этом. –
-1; детали этого ответа кажутся ошибочными. Это чрезмерно ограничительный (не позволяя, например, подчеркивания в именах таблиц, которые довольно распространены), и, как отметил @JanHudec, если 'scrub()' когда-либо удаляет какие-либо символы, это почти наверняка сломает запрос ; это должно привести к тому, что исключение будет выбрано немедленно, а не ждать времени выполнения запроса. –