Après avoir été exposée à de nombreuses couches d'abstraction de bases de données, je commence à me demander à quoi sert chaque bibliothèque inventant son propre paradigme pour accéder aux données. Reprendre un nouveau DAL, c'est comme recommencer une nouvelle langue, alors que d'habitude, je veux simplement convaincre la couche de sortir une requête SQL que j'ai déjà écrite dans ma tête.
Et c'est sans même toucher à la lisibilité après coup:
# Exhibit A: A typical DAL
rows = db(db.ips_x_users.ip_addr == '127.0.0.1')
.inner_join(db.ips_x_users.user_id == db.users.id)
.select(order=(db.ips_x_users.last_seen, 'desc'), limit=10)
# Exhibit B: Another typical DAL
rows = db.ips_x_users
.join(db.users, on=db.ips_x_users.user_id == db.users.id)
.filter(db.ips_x_users.ip_addr == '127.0.0.1')
.select(sort=~db.ips_x_users, limit=10)
# Exhibit C: A hypothetical DAL based on standard SQL syntax
rows = db('''SELECT * FROM ips_x_users
INNER JOIN users ON
(ips_x_users.user_id = users.id)
WHERE ips_x_users.ip_addr = ip
ORDER BY last_seen DESC LIMIT 10''', ip='127.0.0.1')
Quel est le problème avec la syntaxe SQL standard? Il a été créé dans un but précis, et il convient parfaitement à cet objectif. C'est peut-être juste moi, mais je comprends l'extrait C beaucoup plus facilement que les deux premiers. Les mots-clés et astuces de syntaxe renommés sont mignons, mais IMO, en fin de compte, ils ne facilitent pas la récupération des lignes pour le codeur.
Cela semblait probablement une longue diatribe, mais il y a une vraie question ici. Étant donné que chaque DAL semble inventer un nouveau DSL pour les requêtes plutôt que de simplement analyser le SQL éprouvé, il doit y avoir des avantages à utiliser une syntaxe différente, ou des lacunes dans la syntaxe SQL standard que je ne réalise pas. Quelqu'un pourrait-il indiquer ce que je néglige ici?