Jak działa parametryzacja zapytań SQL?

Czuję się trochę głupio za to, że o to pytam, ponieważ wydaje mi się, że jestem jedyną osobą na świecie, która tego nie rozumie, ale i tak tu idzie. Jako przykład użyję Pythona. Kiedy używam surowych zapytań SQL (zwykle używam ORM) używam parametryzacji, jak w tym przykładzie, używając SQLite:

Metoda A:

username = "wayne"
query_params = (username)
cursor.execute("SELECT * FROM mytable WHERE user=?", query_params)

Wiem, że to działa i wiem, że jest to ogólnie zalecany sposób, aby to zrobić. Podejściem polegającym na wstrzykiwaniu kodu SQL w taki sam sposób byłoby coś takiego:

Metoda B:

username = "wayne"
cursor.execute("SELECT * FROM mytable WHERE user='%s'" % username)

O ile wiem, rozumiem wstrzyknięcie SQL, jak wyjaśniono wten artykuł w Wikipedii. Moje pytanie jest po prostu: w jaki sposób metoda naprawdę różni się od metody B? Dlaczego wynik końcowy metody A nie jest taki sam jak metoda B? Zakładam, żecursor.execute() metoda (część specyfikacji DB-API Pythona) dba o poprawne uciekanie i sprawdzanie typu danych wejściowych, ale nigdzie nie jest to wyraźnie zaznaczone. Czy to wszystko jest parametryzacją w tym kontekście? Dla mnie, kiedy mówimy „parametryzacja”, wszystko to oznacza „podstawianie łańcuchów”, jak np.% -Formatowanie. Czy to nieprawda?

questionAnswers(5)

yourAnswerToTheQuestion