Seite 1 von 1

SQLAlchemy CONCAT

Verfasst: Mittwoch 21. September 2016, 14:40
von taake
Moin,

ich bräuchte mal etwas Hilfe bei einem Statement in SQLAlchemy.

In MySQL sieht das Statement wie folgt aus

Code: Alles auswählen

SELECT * FROM `kunde` WHERE CONCAT( `anrede` , `nachname` ) LIKE '%Testbestellung%'
Wie sieht das ganze in SQLAlchemy aus?
Müsste wohl so oder eher so in der Art aussehen, glaube ich

Code: Alles auswählen

testorder = session.query(accounting).concat((accounting.vorname, accounting.nachname).ilike("%Testbestellung%"))
Hoffe die Frage ist einigermaßen Verständlich,
Part 1: Wie muss das sqlachemy query aussehen
Part 2: Was muss ich dafür importieren concat oder so etwas in der Art gibt es nicht, eben so wenig wie konkreten Beispielcode.

Hoffe hier kann mir kurz Jemand unter die Arme greifen.

Re: SQLAlchemy CONCAT

Verfasst: Mittwoch 21. September 2016, 15:24
von BlackJack
@taake: Also so grundsätzlich gibt es doch Beispiele wie Abfragen über das ORM mit einem `Session`-Objekt funktionieren. Und aus den Operatoren ``==``, ``!=``, ``<``, ``>`` und so weiter könnte man auch ableiten das ``+`` funktionieren könnte. Und das tut es auch:

Code: Alles auswählen

In [37]: print session.query(Accounting).filter((Accounting.vorname + ' ' + Acco
    ...: unting.nachname).like('%Something%'))
SELECT accounting.id AS accounting_id, accounting.vorname AS accounting_vorname, accounting.nachname AS accounting_nachname 
FROM accounting 
WHERE (concat(concat(accounting.vorname, %s), accounting.nachname)) LIKE %s
Ansonsten gibt's im `sql.functions`-Untermodul auch eine `concat()`-Funktion:

Code: Alles auswählen

In [42]: print session.query(Accounting).filter(sa.sql.functions.concat(Accounti
    ...: ng.vorname, ' ', Accounting.nachname).like('%Something%'))
SELECT accounting.id AS accounting_id, accounting.vorname AS accounting_vorname, accounting.nachname AS accounting_nachname 
FROM accounting 
WHERE concat(accounting.vorname, %s, accounting.nachname) LIKE %s
Falls es Funktionen nicht gibt, kann man sich die ”generisch” mit `sql.func` erstellen. Ich würde aber in diesem Fall bei ``+`` bleiben, denn `concat()` ist nicht SQL-Standard und ``+`` wird passend zur Datenbank übersetzt. Standard wäre der ``||``-Operator.

Re: SQLAlchemy CONCAT

Verfasst: Donnerstag 22. September 2016, 16:04
von taake
@BlackJack: Vielen Dank für die prompte Hilfe - und ja wieder einmal hast du wohl recht ;)