Как удалить запись из таблицы? - PullRequest
18 голосов
/ 20 октября 2010

У меня проблема с удалением записи из моей базы данных SQLite3:

conn = sqlite3.connect('databaza.db')
c = conn.cursor()
data3 = str(input('Please enter name: '))
mydata = c.execute('DELETE FROM Zoznam WHERE Name=?', (data3,))
conn.commit()
c.close

Все в порядке, ошибок нет, но функция удаления не работает!

У кого-нибудь естьидея?

Ответы [ 6 ]

16 голосов
/ 22 июня 2015

Правильный синтаксис для параметризованного запроса:

mydata = c.execute("DELETE FROM Zoznam WHERE Name=?", (data3,))

Убедитесь, что параметр использует запятую, чтобы сделать его кортежом Python.

Это будетпомочь предотвратить SQL-инъекцию, что возможно при передаче отформатированной строки.Подробнее о SQL-инъекциях здесь

Похожие записи здесь .

1 голос
/ 11 августа 2017

Попробуйте с:

mydata = c.execute('DELETE FROM Zoznam WHERE Name = (?)', (data3))

Без ',' и '?'между '()'

0 голосов
/ 08 апреля 2018

Я немного опаздываю на вечеринку, но если вы ищете в Google "python sqlite delete row", это первое, что возникает, и у меня возникла та же проблема, когда вещи не доставлялись DELETE'd из моей sqlite DB,Я использую Python 2.7 в Debian Jessie.

Ранее, когда я писал код Python для добавления и извлечения информации в базе данных sqlite, я писал команды с правильной прописной буквой, где это было необходимо, и это работало.

curs.execute("SELECT example_column1 FROM example_table WHERE example_column2=(?)", (Variable,))

Однако ...

curs.execute("DELETE FROM example_table WHERE example_column1=(?)", (Variable,)):

По некоторым причинам это не работает с командой DELETE.Я должен был отправить эту команду в нижнем регистре, прежде чем sqlite будет учитывать отправляемую команду.

conn=sqlite3.connect('example.db')
curs=conn.cursor()
curs.execute("delete from example_table where example_column=(?)", (Variable,))
conn.commit()
conn.close()

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

0 голосов
/ 20 октября 2010

Спасибо всем, кто пытался помочь. Правильный код:

conn = sqlite3.connect('databaza.db')
c = conn.cursor()
conn.text_factory = str    
data3 = str(input('Please enter name: '))
query = "DELETE FROM Zoznam WHERE Name = '%s';" % data3.strip()
print(query)
mydata = c.execute(query)
0 голосов
/ 20 октября 2010

Я советую сначала создать строку для запроса, а затем выполнить его. например:

query = "delete from zoznam where name = '%s' " % data3
c.execute(query)
conn.commit() 
0 голосов
/ 20 октября 2010

Проверьте права доступа к файлу.

Кроме того, я предпочитаю жетон:

mydata = c.execute("DELETE FROM Zoznam WHERE Name='%s'" % data3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...