2009-08-04 7 views
3

Ich verwende SQLAlchemy, um datenbankunabhängige Abfragen zu erstellen.Datenbankunabhängig to_char Funktion in SQLAlchemy

Ich habe ein Problem mit to_char Funktion konfrontiert.

Betrachten Sie die einfache Abfrage wie:

select to_char(id,'999') from xyz 

Es auf Postgres funktioniert aber MySQL nicht unterstützt.

Wie kann ich diese Abfrage mithilfe von SQLAlchemy datenbankunabhängig machen?

Antwort

0

Sie sind für format in MySQL suchen:

select format(id, '999') from xyz 

Um Ihre all-in-one Frage zu beantworten: Es gibt keine Cross-Datenbank Art und Weise, dies zu tun. Jedes RDBMS ist sehr unterschiedlich und es gibt keine echte Standardisierung nach den ziemlich einfachen Abfragen. Dies gilt insbesondere für String-Manipulationen.

+0

Ich bin damit einverstanden .. to u .. ich einige sqlalchemy dass die Verwendung von wo lesen wir den Unterschied kommen kann. Ich habe versucht, aber gescheitert :( – asb

+0

@asb: Sie müssen überprüfen, welche RDBMS Sie verwenden, bevor Sie den Anruf, leider. Dies würde entweder in der Funktion selbst sein, oder einfach verschiedene Funktionen mit verschiedenen Motoren verwenden. – Eric

3

Verwenden Sie die CAST-Funktion für einfache Typumwandlungen. Es ist SQL-Standard und SQLAlchemy unterstützt es direkt über die Funktion cast(): http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/expressions.html?highlight=cast#sqlalchemy.sql.expression.cast.

Für Datumswerte hat SQLA eine extract() - Funktion, die die SQL EXTRACT-Funktion erzeugt - eine Übersetzungsschicht übersetzt gebräuchliche Feldnamen wie "Monat", "Tag", "Minute" usw. in das entsprechende Schlüsselwort für das Backend in Benutzung.

2

die CAST-Funktion verwenden, zum Beispiel

cast(numberfield as char)