supertext = """О великий текст,
Какой величины ты бы ни был
Сохранить тебя мне нужно.."""
cursor.execute("""CREATE TABLE IF NOT EXISTS table1(
id INT,
embed VARCHAR
)""")
if cursor.execute("SELECT id FROM table1 WHERE id = 1").fetchone() is None:
cursor.execute(f"INSERT INTO table1 VALUES (1, '{supertext}')")
connection.commit()
print(cursor.execute("SELECT embed FROM table1 WHERE id = 1").fetchone()[0])
cursor.execute(f"INSERT INTO table1 VALUES (1, '{supertext}')")
cursor.execute("INSERT INTO table1 VALUES (?, ?)", (1, supertext))
int primary key
человек, чтобы заварить чайник будет вызывать такси, ехать в соседний город, там покупать чайник, ехать в другой город, там покупать удлинитель, ехать в третий город, там зайти в кафешку и выпить чаю....
защита от sql иньекций это параметризированные запросы, их поддерживает штатно драйверМногие забывают об этом или даже не знают.
пул объединений субд это что? точнее зачем?ну, это когда тебе в коде не нужно заботиться о том когда открывать и открывать соединение к СУБД, а пул соединений делает это за тебя, причем оптимальнее. Потому что если забыл в коде закрыть соединение без пула соединений, то в какой-то момент СУБД откажет в запросах.
погуглив sqlite limitations, удивишься.
(насчет подстановки данных с помощью "?") я не заметил в моём случае разницы между подстановкой данных и более мне привычными f-строками.
Насчет primary key я почитал в документации, я понял его "задачу" - каждая строка имеет свой уникальный идентификатор, но не до конца понял "а почему я так не могу?". После добавления primary key в таблицу добавляется просто еще одно правило которое (возможно) никак не сказывается на, например, поиске строки с указанным id: как было WHERE id = 1 так и осталось.
cursor.execute("INSERT INTO table1(id, embed) VALUES (?, ?)", (1, supertext))
cursor.execute("INSERT INTO table1(embed) VALUES (?)", (supertext, ))
я не заметил в моём случае разницы между подстановкой данных и более мне привычными f-строками.а вы
На самом деле это очень удобно, когда за тебя автоматически заполняют поля классов, избавляя от написания скучного кода вида this.name=row['name']...
мизерная и простая задача, что любой программист ее решит за десятки минут, без использования фреймворков.(не факт)