ierarhsed
@ierarhsed
страдающий апатией любитель писать ботов

Sqlite — как добавить текст в ячейку бд, если в нем могут содержаться и одинарные, и двойные кавычки?

Вопрос в шапке.

Я делаю телеграм-бота, который сохраняет написанные ему сообщения от людей. При добавлении сообщения с кавычками, мне выдает ошибку near "..." syntax error, часть кода:

save.execute(f'INSERT INTO messages (chat, id) VALUES ({message.chat.id}, {message.id})')
updateText = '''UPDATE messages SET {0} = \"{1}\" WHERE chat = ''' + str(message.chat.id) + ' AND id = ' + str(message.id)

if message.text:
    save.execute(updateText.format('text', message.text.html))
elif message.caption:
    save.execute(updateText.format('text', message.caption.html))


С \"{1}\" так же не работает - раньше там стояли двойные строки, но тогда при двойных в сообщении выдавало ошибку. Я сменил их на одинарные, выдавало ошибку с сообщениями, где есть одинарные. Следуя из этого, у меня есть только два подозрения в голове:
1. Есть какое-то другое обозначение строк, которое не позволит вылезти этой ошибке и о котором я не знаю;
2. Есть вариант добавлять текст с пробелами без кавычек, о котором я так же не знаю
Попытался что-то найти в интернете, но или я плохо искал, или подтверждения моих подозрений просто-напросто не существует. Прошу помощи :(

UPD: попробовал сделать так:
if message.text:
    save.execute(updateText.format('text', message.text.html.replace('"', '\"').replace("'", "\'")))
elif message.caption:
    save.execute(updateText.format('text', message.caption.html.replace('"', '\"').replace("'", "\'")))

Апострофы теперь пропускаются, но двойные кавычки все так же нет
  • Вопрос задан
  • 307 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
А всего-то нужно прочитать документацию. Там этот случай описан, и показано, как делать правильно.
con = sqlite3.connect(":memory:")
cur = con.execute("CREATE TABLE lang(name, first_appeared)")

# This is the named style used with executemany():
data = (
    {"name": "C", "year": 1972},
    {"name": "Fortran", "year": 1957},
    {"name": "Python", "year": 1991},
    {"name": "Go", "year": 2009},
)
cur.executemany("INSERT INTO lang VALUES(:name, :year)", data)

# This is the qmark style used in a SELECT query:
params = (1972,)
cur.execute("SELECT * FROM lang WHERE first_appeared = ?", params)
print(cur.fetchall())
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы