Chcę przekazać parametry zapytania do cursor.execute()
metody MySQLdb
jako nazwanego słownika, tak, że są one uciekł z SQL injection.Python MySQLdb: Parametry kwerendy nazwanego słowniku
Czy możesz wyjaśnić, dlaczego to daje KeyError:
>>>c.execute('select id from users where username=%(user)s', {'user':'bob',})
KeyError: 'user'
MySQLdb ręcznego http://mysql-python.sourceforge.net/MySQLdb.html mówi:
* paramstyle stała
String określający rodzaj znacznika parametru formatowania oczekiwane przez interfejs. Ustaw na "formatuj" = kody formatu printf ANSI C, np. "... WHERE name =% s". Jeśli obiekt odwzorowania jest używany dla conn.execute(), interfejs faktycznie używa "pyformat" = rozszerzonych kodów formatu Python, np. "... WHERE name =% (name) s '. Jednak API nie obecnie umożliwiają określenie więcej niż jednego stylu w paramstyle *
Wstawiam wartość *** kolumny ***. Linia w dokumentacji oznacza, że następujący kod jest nielegalne: 'c.execute ('select id% s gdzie username =% s' ('użytkowników', 'bob'))' – mercador
@mercador prawo, 'from% s' piece jest przyczyną niepowodzenia, ponieważ próbujesz sparametryzować nazwę tabeli. Zaletą korzystania z 'execute' w ten sposób jest to, że pomaga zapobiegać iniekcji SQL, ale jeśli podejmiesz odpowiednie środki ostrożności (które nie jestem ekspertem, ale wymagałyby odpowiedniego odkażenia/uniknięcia parametrów), możesz użyj wbudowanego formatowania napisów w Pythonie do zbudowania zapytania, a następnie przekaż je do 'execute'. Ponownie głównym problemem jest iniekcja SQL. Mam nadzieję że to pomoże! – RocketDonkey