Подстановка SQLite и кавычки

У меня есть эта строка, которая работает нормально:

c.execute('select cleanseq from cleanseqs WHERE newID="%s"'%name) 

Но вместо замены строки вместо замены я хочу использовать замену параметров SQLite (потому что я вижу здесь, что это безопаснее).

Это моя неудачная попытка:

 t = (name,) c.execute('select cleanseq from cleanseqs WHERE newID="?"',t) 

Но эта строка возвращает:

'Неправильное количество прилагаемых связок. В текущем заявлении используется 0, и есть 1 поставленный. '

Поэтому левая часть моего заявления не работает. Я поставляю одну привязку (имя, в t), но кажется, что знак вопроса (?) Не анализируется. Если я удаляю кавычки, то это работает. Но я хочу, чтобы кавычки оставались там, так как я помню, что есть случаи, когда они мне нужны.

Итак, вопрос: как мне преобразовать эту строку:

 c.execute('select cleanseq from cleanseqs WHERE newID="%s"'%name) 

о "" "Если я удалю кавычки, замачивающие?", это работает. Но я хочу, чтобы кавычки оставались там, так как я помню, что есть случаи, когда они мне нужны. ""

То, что вы помните, когда вы строили всю инструкцию SQL, не имеет значения.

Новая история: отметьте? каждое место в выражении SQL, где вы хотите заменить значение, а затем передать в кортеж, содержащий одно значение на? — это так просто; оболочка будет приводить любые строки, чтобы убедиться, что они являются допустимыми константами SQL.

Любой, кто любит меня, нашел эту тему и действительно разочаровался в людях, игнорируя тот факт, что иногда вы не можете просто игнорировать кавычки (потому что вы используете команду LIKE), вы можете исправить это, сделав что-то вроде:

 var = name + "%" c.execute('SELECT foo FROM bar WHERE name LIKE ?',(var,)) 

Это позволит вам подменить в подстановочных знаках в этой ситуации.

Я считаю, что стиль привязки именованных параметров гораздо читабельнее – и sqlite3 поддерживает его:

 c.execute('SELECT cleanseq FROM cleanseqs WHERE newID=:t', locals()) 

Примечание: передача {'t': t} или dict(t=t) вместо locals() будет более пунктуально корректной, но, на мой взгляд, это будет мешать читаемости при наличии нескольких параметров и / или более длинных имен. В любом случае, я нахожу :t лучше, чем ? ;-).

Потерять цитаты?

 c.execute('select cleanseq from cleanseqs WHERE newID=?',(t,)) 

Он рассматривает его как строку «?».

Вам нужно использовать двойные кавычки вокруг всего выражения, а не синглов?

Библиотека будет обрабатывать цитаты и ускользнуть для вас. Просто напишите свой запрос следующим образом:

 c.execute('SELECT cleanseq FROM cleanseqs WHERE newID=?', (name,)) 

Обычный пользователь

просто заметили, что вам нужно будет сделать это руководство, используя небезопасный метод sql_string = "другой sql-оператор здесь .. fieldname = \" "+ value +" \ ";"

это единственный способ, которым вы его правильно разобрали. используя SQLite для win ce. и хорошо оставили меня без другой альтернативы, просто избегайте своих ценностей, прежде чем вкладывать их в другое место, скорее всего, вы получите очень грубую базу данных из SQL-инъекций: '(lol