Hi, vielleicht sollte ich mal etwas Klarheit schaffen. Camelot ist in so fern mit Access vergleichbar als das man mit relativ wenig Aufwand eine grafische Oberfläche für eine Datenbank erstellen kann. Die Wege dahin sind jedoch völlig unterschiedlich! Das was du als Camelot per apt-get nachinstalliert hast hat nichts mit dem zu tun, worum es hier geht.
Bei Access erstellt man die grafische Oberfläche und die Datenbankstruktur überwiegend mit einem grafischen Editor und ergänzt das ganze eventuell noch mit ein wenig Code.
Bei Camelot erstellt man dagegen ein sogenanntes Model. Dafür verwendet Camelot Elixir. Aus diesem Model wird automatisch eine grafische Oberfläche generiert, die man nachträglich ändern kann. Ich will versuchen, dass mal an einem einfachen Beispiel zu erläutern.
Wenn alles richtig installiert ist beginnt man die Entwicklung in der Konsole mit dem Befehl
camelot_admin startproject adressbuch
wobei adressbuch durch einen beliebigen Namen ersetzt werden kann. Es wird ein Verzeichnis mit dem angegebenen Projektnamen erstellt. Jetzt kann man Camelot schon starten
python adressbuch/main.py
Camelot bringt schon einige Models mit. Sichtbar sind Organisations und Persons. Ich werde die aber mal ignorieren, aber spielt ruhig damit. Standardmäßig wird eine SQlite Datenbank in dem Verzeichnis angelegt, von dem aus man Python startet. Wenn man also einen Starter anlegt muss man unbedingt ein Arbeitsverzeichnis angeben.
Im Projektverzeichnis befindet sich die Datei model.py. Den vorgegebenen Code wird beibehalten und neuer Code hinten angehängt.
from sqlalchemy import Unicode
from elixir import Entity, Field
from camelot.admin.entity_admin import EntityAdmin
class Adressbuch(Entity):
vorname = Field(Unicode(30))
nachname = Field(Unicode(30))
strasse = Field(Unicode(30))
plz = Field(Unicode(10))
ort = Field(Unicode(20))
class Admin(EntityAdmin):
verbose_name = "Adresse"
list_display = ['vorname', 'nachname', 'strasse', 'plz', 'ort']
def __unicode__(self):
return self.nachname or 'unknown name'
Damit ist ein einfaches Model definiert. Entity ist eine Klasse von Camelot die festlegt, dass es sich um ein entsprechendes Datenbankmodel handelt. Field definiert eine Datenbankspalte und Unicode ist in unserem Fall der Spaltentyp. Es gibt weitere Standard Typen wie Integer oder Numeric, aber es gibt auch ein paar spezielle Datentypen von Camelot wie Color oder Rating.
Die Entity Klasse bekommt noch eine Subklasse namens Admin und ist vom Typ EntityAdmin. Daraus leitet Camelot ab, welche der Felder auf der grafischen Oberfläche sichtbar sein sollen und hier lässt sich das Interface auch optisch anpassen.
Die Funktion
__unicode__
(je zwei Unterstriche vor und nach dem unicode!) wird zur Rückgabe eines Wertes verwendet, wenn nichts anderes definiert ist. Hier sollte man ein möglichst aussagekräftiges Feld wählen.
Wenn man Camelot jetzt startet wird bereits erwähnt startet wird die Datei model-data.sqlite erstellt. Darin findet man, neben vielen anderen mitgelieferten Tabellen die Tabelle model_adressbuch und darin die Felder, die definiert wurden (Screenshot wurde mit Sqliteman erstellt. Gehört nicht zu Camelot). Im eigentlichen Camelot Fenster ist von der Tabelle noch nichts zu sehen. Dafür muss die Datei application_admin.py bearbeitet werden.
Als erstes muss das eigene Model importiert werden. Den Import schreibt man am besten unter die anderen.
Zusätzlich muss in dem Return Befehl eine weitere Section angelegt werden (oder die beiden Standard Sections durch eine eigene erstetzen, was ich hier tun werde). Die Datei application_admin.py sollte dann in etwa so aussehen.
from camelot.view.art import Icon
from camelot.admin.application_admin import ApplicationAdmin
from camelot.admin.section import Section
class MyApplicationAdmin(ApplicationAdmin):
def get_sections(self):
from camelot.model.memento import Memento
from camelot.model.authentication import Person, Organization
from camelot.model.i18n import Translation
from model import Adressbuch
return [Section('adresse',
Icon('tango/22x22/apps/system-users.png'),
items = [Adressbuch])
]
Und schwupp, man hat ein Adressbuch. Wie man unschwer erkennen kann ist das Programm an einigen Stellen ziemlich englisch. Der "verbose_name", der in der model.py angegeben wird, sollte immer als Einzahl angegeben werden. Camelot hängt hier ein "s" an, um daraus eine Mehrzahl zu machen. Man sollte als verbose_name also vielleicht englische Worte verwenden, damit nicht aus Katze "Katzes" oder aus Farbe "Farbes" wird. Ob man das Verhalten ändern kann weiß ich noch nicht.
Ich schrieb in meinem Blog, dass man Camelot ohne Python Kenntnisse verwenden kann. Das ist in so fern richtig, wenn man einfache Datenbanken anlegt und keine weitere "Intelligenz" benötigt. Sofern man sich stur an die hier beschriebene Vorgehensweise hält kommt man zumindest ein Stück weit ohne Python Kenntnisse. Will man aber komplexeren Anwendungen programmieren kommt man um Python nicht drumrum.
Das sollte als Einführung genügen. Ich hoffe, es macht zumindest etwas klarer, wie Camelot aufgebaut ist.