Frage

Was ist der beste Weg, um mit einer Datenbank mit Haskell zu interagieren? Ich bin daran gewöhnt, eine Art von ORM (Django ORM, Hibernate, etc.) zu verwenden und etwas Ähnliches wäre schön, wenn Anwendungen mit Happs .

Edit: Ich möchte frei sein, so weit zur Auswahl Postgresql MySQL- und SQLite als die eigentlichen Datenbanken gehen.

War es hilfreich?

Lösung

Die Bibliothek, die ich im Sinne habe, ist kein ORM, aber es kann immer noch das tun, was Sie wollen.

Wenn Sie etwas wollen, dass Ihre Datenbank macht greift sicher, während die Dinge in Ihr Programm zu integrieren a href schön dann ausprobieren <= „http://www.haskell.org/haskellwiki/Applications_and_libraries/Database_interfaces/HaskellDB“ rel = "noreferrer „> haskelldb . Es sieht im Grunde in Ihrem Schema, erzeugt einige Datenstrukturen, und dann gibt Sie sichere Möglichkeiten zur Abfrage eingeben. Es ist schon eine ganze Weile, und die Gemeinschaft Meinung ist, dass es gut und stabil.

Um es zu nutzen, müssen Sie einige zugrunde liegenden Haskell DB-Bibliothek wie HSQL.

Viel Glück!

Andere Tipps

Der Grund, dass Bibliotheken ORM vorhanden ist, dass es relativ großer Unterschied zwischen Objekten in C # oder Java ist und was Sie in einer Datenbank speichern. Dies ist nicht so sehr ein Problem in Haskell, weil:

  1. Es spielt keine Objekte haben
  2. Beide Datenbanken und Haskell-Liste haben ihre Inspiration in der mathematischen Mengenlehre, so dass die Reibung zwischen ihnen ist viel weniger als zwischen Datenbanken und Objekte.

Persistent ist ziemlich nett zu benutzen, und können Sie auf Typinferenz verlassen, um die Tabelle Ihre Abfrage bezieht sich auf zu bestimmen. Zum Beispiel, wenn ich habe folgende in meinem „Modellen“ file:

User
    name Text
    age Int

Login
    user UserId
    login Text
    passwd Text

Dann ist dieses ich tun konnte:

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

Und es würde wissen, welche Tabellen ich meinte. Natürlich, werden Sie wahrscheinlich nicht wollen, Teil-Code wie diesen zu schreiben, aber ich wollte nur die Abfragen betonen.

Ich persönlich verwende nur Database.HDBC , die von "Real World Haskell" empfohlen: http://book.realworldhaskell.org/read/using-databases.html

Aber ich stimme zu, dass es Sinn macht definitiv eine höhere Ebene DB-Zugriffsschicht zu verwenden, und ich werde versuchen, wahrscheinlich für zukünftige Projekte zu einem solchen Modell zu bewegen. Zu diesem Thema fand ich diesen Beitrag von 2012, die eine Geschichte und den Vergleich solcher Lösungen für Haskell bietet: http://www.yesodweb.com/blog/2012/03/history -von-Persistenz

Von ihm entnehme ich, dass Persistent ( Dokumentation ) und Groundhog ( einige Dokumentation , in diesem geschrieben für Groundhog Ankündigung Sie können sehen, dass es genau die DBs unterstützt Sie daran interessiert sind.

Beachten Sie auch dieses Thema auf Haskell-Anfänger , in denen Esqueletto als bessere Wahl erwähnt für Update-Operationen.

Hinweis

, die persistent Schiffe mit Yesod und als solche können eine größere folgenden haben.

ich eigentlich sehr ähnlich wie die Vorgehensweise von Happs ( Happs -state ), die Sie über das gehen durch den Rangier- / unmarshalling cludge von ORM vergessen lässt und lassen Sie uns einfach Daten Haskells Typen verwenden.

Haben Sie durch die Datenbank-Mapping und Zugriffspakete sehen http://hackage.haskell.org/packages/archive/ pkg-list.html # cat: Datenbank

Ich habe verwende sie nicht, so kann ein bestimmt man nicht empfehlen. Ich weiß auch nicht, welche Datenbanken Sie über die Verwendung planen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top