29
Próbuję uruchomić ten prosty surowy instrukcji SQL z parametrami z sqlalchemy (szerokość alembic skryptu):sqlalchemy: wykonywanie surowego sql z powiązaniami parametrów
from alembic import op
t = {"code": "123", "description": "one two three"}
op.execute("insert into field_tags (id, field_id, code, description) "+
"values (1,'zasz', :code ,:description')", t)
I pojawia się następujący błąd:
sqlalchemy.exc.StatementError: A value is required for bind parameter
'description' (original cause: InvalidRequestError: A value is required for
bind parameter 'description') "insert into field_tags (id, field_id, code,
description) values (1, 'math',
%(code)s ,%(description)s)" []
rozwiązanie:
t = {"code": "123", "description": "one two three"}
from sqlalchemy.sql import text
op.get_bind().execute(text("insert into field_tags (id, field_id, code, description) "+
"values (1,'zasz', :code ,:description')"), **t)
Próbowałem tego (przekazując ** t jako argument) i otrzymałem: TypeError: execute() otrzymało nieoczekiwany argument słowa kluczowego "kod" –
@MaxL., Mój zły, czy mógłbyś spróbować kodu z zaktualizowanej odpowiedzi? Chodzi o to, aby uzyskać obiekt połączenia i wywołać na nim 'execute()'. – alecxe
Dzięki, że pomogło, była jeszcze jedna zmiana, którą musiałem wykonać: zapytanie musi być zawinięte przez funkcję tekstową (z tekstu importu sqlalchemy.sql), dało +1 twojej odpowiedzi, dodano tekst wrapp, (jak w mojej aktualizacji powyżej), zaakceptuję to jako ostateczną odpowiedź. –