DaftAcademy / daftacademy-python_levelup-spring2021

19 stars 10 forks source link

4.3 DB-API’s parameter substitution dla order by #27

Closed mateusz91t closed 3 years ago

mateusz91t commented 3 years ago

Nie działa placeholder dla klauzuli ORDER BY. Ten kawałek kodu sortuje po CustomerId zamiast po 'LastName'. LIMIT oraz OFFSET działają bez zarzutu. Czy ktoś wie dlaczego? Czy to da się naprawić, czy trzeba format string i to jakoś zabezpieczać przed SQLInjection? Czy to może być coś związanego z tym: https://stackoverflow.com/questions/48939214/why-can-parameter-substitution-not-be-used-with-tables-in-sqlite3

    employees = cursor.execute(
        "SELECT EmployeeID id, LastName last_name, FirstName first_name, City city "
        "FROM Employees ORDER BY :orby LIMIT :lim OFFSET :off;"
        , {"orby": 'LastName', "lim": limit, "off": offset}
    ).fetchall()
adlerka commented 3 years ago

Wygląda na to, że faktycznie trzeba użyć formatowanego stringa. sqlite3-query-order-by-parameter-with-notation