38 votes

Existe-t-il des outils ORM pour Haskell ?

Quelle est la meilleure façon d'interagir avec une base de données en utilisant Haskell ? J'ai l'habitude d'utiliser une sorte d'ORM (l'ORM de Django, hibernate, etc.) et quelque chose de similaire serait bien lors de la création d'applications avec HAppS .

Edit : J'aimerais être libre de choisir entre Postgresql, MySql et SQLite en ce qui concerne les bases de données proprement dites.

16voto

Jason Dagit Points 5998

La bibliothèque à laquelle je pense n'est pas un ORM, mais elle peut néanmoins faire ce que vous voulez.

Si vous voulez quelque chose qui sécurise les accès à vos bases de données tout en intégrant les choses dans votre programme de manière agréable, essayez donc HaskellDB . Il examine votre schéma, génère des structures de données, puis vous propose des méthodes d'interrogation sûres. Il existe depuis un certain temps et l'opinion de la communauté est qu'il est bon et stable.

Pour l'utiliser, vous aurez besoin d'une bibliothèque Haskell DB sous-jacente comme HSQL.

Bonne chance !

12voto

tomjen Points 2460

La raison pour laquelle les bibliothèques ORM existent est qu'il y a une grande différence relative entre les objets en C# ou Java et ce que vous stockez dans une base de données. Ce n'est pas vraiment un problème en Haskell car :

  1. Il n'a pas d'objets
  2. Les bases de données et la liste Haskell s'inspirent toutes deux de la théorie mathématique des ensembles, de sorte que les frictions entre elles sont beaucoup moins importantes qu'entre les bases de données et les objets.

10voto

John Wiegley Points 1989

Persistent est plutôt agréable à utiliser, et vous permet de vous appuyer sur l'inférence de type pour déterminer la table à laquelle votre requête se rapporte. Par exemple, si j'ai ce qui suit dans mon fichier "models" :

User
    name Text
    age Int

Login
    user UserId
    login Text
    passwd Text

Alors je pourrais faire ça :

Just (Entity uid _)          <- selectFirst [ UserName ==. "Some User ] []
Just (Entity lid Login {..}) <- selectFirst [ LoginUser ==. uid ] []

Et il saurait de quelles tables je parle. Bien sûr, vous n'avez probablement pas envie d'écrire un code partiel comme celui-ci, mais je voulais mettre l'accent sur les requêtes.

2voto

eelco Points 1459

En fait, j'aime beaucoup l'approche de HAppS ( HAppS-State ) qui vous permet d'oublier de passer par le marshalling/unmarshalling des ORM et vous permet d'utiliser simplement les types de données de Haskell.

1voto

wnoise Points 6448

Avez-vous examiné les paquets de mappage et d'accès aux bases de données à l'adresse suivante http://hackage.haskell.org/packages/archive/pkg-list.html#cat:Database

Je ne les ai pas utilisés, je ne peux donc pas en recommander un en particulier. Je ne sais pas non plus quelles bases de données vous envisagez d'utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X