Mam obiekt kwerendy SQLAlchemy i chcę uzyskać tekst skompilowanej instrukcji SQL z wszystkimi powiązanymi parametrami (np. Brak %s
lub innymi zmiennymi oczekującymi na związanie przez kompilator instrukcji lub silnik dialektowy MySQLdb, itp.).Jak uzyskać surowe, skompilowane zapytanie SQL z wyrażenia SQLAlchemy?
Wywołanie str()
na zapytania ujawnia coś takiego:
SELECT id WHERE date_added <= %s AND date_added >= %s ORDER BY count DESC
próbowałam patrząc w query._params ale jest pusty dict. Napisałem własny kompilator, używając this example of the sqlalchemy.ext.compiler.compiles
decorator, ale nawet tam, gdzie chcę dane, nadal istnieje %s
.
Nie mogę się dowiedzieć, kiedy moje parametry zostaną pomieszane, aby utworzyć zapytanie; podczas badania obiektu zapytania są one zawsze pustym słownikiem (chociaż zapytanie wykonuje się poprawnie, a silnik drukuje po włączeniu rejestrowania echa).
Zaczynam otrzymywać komunikat, że SQLAlchemy nie chce, abym znał zapytanie bazowe, ponieważ łamie ogólną naturę interfejsu API ekspresji wszystkich różnych interfejsów API DB. Nie mam nic przeciwko, jeśli zapytanie zostanie wykonane, zanim się dowiem, co to było; Chcę po prostu wiedzieć!
Czy istnieje prosty sposób uzyskania wartości jako słownika? – Damien
@Damien biorąc pod uwagę 'c = q.statement.compile (...)', możesz po prostu uzyskać 'c.params' – Hannele
Post jest oznaczony mysql, więc szczegóły postgresql w tej odpowiedzi nie są naprawdę istotne. – Hannele