MariaDB permet dynamic columns, qui sont des ensembles de données peu peuplés auxquels accèdent les fonctions COLUMN_ADD()
et COLUMN_GET()
.L'utilisation de COLUMN_GET() de MariaDB dans SQLAlchemy
Cependant, nous ne pouvons pas trouver un moyen d'utiliser des colonnes dynamiques avec SQLAlchemy. Nous avons essayé:
from sqlalchemy.sql import func
...
query = session.query(
func.COLUMN_GET(DynamicInfo.dyn_col, 256)
).filter(
DynamicInfo.index_id == index
)
qui produit l'instruction SQL suivante:
SELECT COLUMN_GET(dyn_info.dyn_col, %(COLUMN_GET_2)s) AS `COLUMN_GET_1`
FROM dyn_info
WHERE dyn_info.index_id = %(index_1)s
Le problème est que cette syntaxe est non valide pour COLUMN_GET()
; il doit inclure le type ainsi que la valeur. Nous ne pouvons pas comprendre comment obtenir COLUMN_GET(dyn_info.dyn_col, 256 AS INT)
, sans écrire le SQL nous-mêmes (ce qui annulerait la plupart des avantages de l'utilisation de l'alchimie SQL en premier lieu).
Nous avons aussi regardé beaucoup de code source SQLAlchemy sur la façon dont les colonnes sont traitées, dans l'espoir que nous pourrions copier ce format et ont des comparateurs personnalisés définis. Le problème réside dans le fait que les colonnes dynamiques requièrent le paramètre d'index lorsqu'elles sont appelées, ce qui rendrait la définition de la fonction COLUMN_GET() de loin la solution la plus simple/la plus propre.
Je venais juste de finir ça! Pour nos besoins, il était plus propre de créer notre propre 'Function', mais la seule différence est qu'il a une gestion spéciale de' ClauseElement'. Merci pour la réponse, cependant. – Kittsil