Seite 1 von 1

sqlalchemy

Verfasst: Dienstag 6. August 2013, 13:34
von The Hit-Man
Ich versuche mir gerade eine Klasse zu erstellen, in der ich per SqlAlechemy Daten einfügen, abfragen kann usw. Jetzt stehe ich da vor einem Problem. Habe mir zwar einige Tuts angeschaut aber irgendwie werde ich da nicht schlau raus. Hier mein einfacher Code:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

from sqlalchemy import create_engine
from sqlalchemy import MetaData, Column, Table, ForeignKey
from sqlalchemy import Integer, String
from sqlalchemy.sql import select

class dbtools ():
	def __init__ (self):
		#
		# Tabellen werden nur angelegt wenn diese noch nicht existieren.
		# 
		engine = create_engine('sqlite:///data/bons.sqlite', echo=True)
		metadata = MetaData(bind=engine)
		kaufhaus_table = Table('kaufhaus', metadata,
	
			Column('id', Integer, primary_key=True),
			Column('name', String (20))
			)	
		metadata.create_all ()
	
	def insertKaufhaus (self):
		print (kaufhaus_table)
		'''
		ins = kaufhaus_table.insert()
		new_kaufhaus = ins.values(name="Real")
		conn = engine.connect()
		conn.execute(new_kaufhaus)
		'''
if __name__ == "__main__":
	mydbtools = dbtools ()
	mydbtools.insertKaufhaus ()
	

Im __init__ wird meine Tablelle erstellt ( ist so weit auch richtig ). Nun möchte ich auch eine Methode haben, in der ich z.B. Daten einfügen kann. Allerdings sind ja in der Methode ( insertKaufhaus ), die Variablen kaufhaus_table wieder unbekannt. Wie lößt man das Problem am besten? Wollte jetzt ungern globale Variablen benutzen. Aber irgendwie muß ich ja auch an die Tablellen wieder ran, die ich angelegt hatte.

Re: sqlalchemy

Verfasst: Dienstag 6. August 2013, 14:14
von BlackJack
@The Hit-Man: Deine Klasse sollte nach den üblichen Konventionen `DBTools` heissen. Oder `DbTools`. Aber halt nicht komplett in Kleinbuchstaben. Dann brauchst Du auch diesen unnötigen `my`-Präfix nicht, wenn Du ein Exemplar von dem Objekt erstellst.

Das ist so aber sowieso keine Klasse. Nur syntaktisch. Denn das Objekt kapselt ja überhaupt keinen Zustande den die Methoden gemeinsam haben. Die beiden „Methoden” könnten ohne weiteres einfache Funktionen sein.

Die Tabellen-Exemplare würde ich auf Modulebene erstellen. Denn aus Sicht Deines Programms sind das ja Konstante Werte welche die Tabellen in der Datenbank beschreiben. Die `engine` sollte man dann natürlich nicht an die Metadaten binden, denn wenn man das auf Modulebene macht, legt man dort quasi „statisch” die Datenbank fest. Kann also nicht mehrere davon haben. Zum Beispiel eine Produktive, eine zu Testen/Spielen, und eine für automatisierte Tests.

Gibt es einen Grund warum Du auf dieser Ebene arbeitest und nicht das ORM von SQLAlchemy verwendest?

Re: sqlalchemy

Verfasst: Dienstag 6. August 2013, 15:43
von The Hit-Man
naja, ich habe einfach nach einem Beispiel gearbeitet ... Weil ich gerade damit erst anfange.

http://www.blog.pythonlibrary.org/2010/ ... rt-1-of-2/


An sonsten habe ich kein gutes Tut gefunden :( und wollte mit sqlalchemy ein wenig unabhängig sein, den Datenbanken gegenüber. Ich versuche mich da gerade bischen reinzudenken. Vorher hatte ich nur ganz normalen SQL-Syntax benutzt.

Re: sqlalchemy

Verfasst: Dienstag 6. August 2013, 15:55
von BlackJack
@The Hit-Man: Das Tutorial verwendet ja noch Python 2.5 und SQLAlchemy 0.6. Was fehlt Dir denn in der offiziellen SQLAlchemy-Dokumentation? Da gibt es doch auch Tutorials und Beispiele.

Re: sqlalchemy

Verfasst: Dienstag 6. August 2013, 18:20
von The Hit-Man
naja, sieht alles sehr sehr mächtig aus ... muß mich da irgendwie erst mal rein denken ...

Re: sqlalchemy

Verfasst: Dienstag 6. August 2013, 18:56
von The Hit-Man
irgendwie raffe ich das total nicht :( also die Beispiele auf der Seite ... grrrrrr

http://docs.sqlalchemy.org/en/rel_0_8/orm/tutorial.html

Re: sqlalchemy

Verfasst: Dienstag 6. August 2013, 20:55
von Hyperion
The Hit-Man hat geschrieben:irgendwie raffe ich das total nicht :( also die Beispiele auf der Seite ... grrrrrr

http://docs.sqlalchemy.org/en/rel_0_8/orm/tutorial.html
Woran genau mangelt es Dir denn beim Verständnis? Du schreibst das jetzt so allgemein, dass es uns unklar ist, *was* genau Du an dem Tutorial nicht verstehst...

Re: sqlalchemy

Verfasst: Dienstag 6. August 2013, 21:01
von The Hit-Man
Ach bekomme immer die Kriese wenn es beim ersten Mal nicht klappt ... Muß mir eben bischen Zeit nehmen. Erste Erfolge hatte ich schon. Jetzt verstehe ich erst mal das man die Tabellen im Code definieren muß auch wenn meine ja schon fertig sind. Sonst hat das ja alles keinen Sinn ;)
Datensätze anlegen funktioniert schon mal ... Mir graut es schon davor, "joins" zu basteln ...

Für jede einzelne Tablelle muß also eine Beschreibung im Code interlegt sein.

Re: sqlalchemy

Verfasst: Dienstag 6. August 2013, 23:06
von BlackJack
@The Hit-Man: Die Tabellen im Code definieren müsstest Du eine Ebene tiefer doch auch. Dort mit `Table()`-Exemplaren.

Joins musst Du beim ORM ja nicht mehr unbedingt selber basteln, zumindest nicht wenn es Fremdschlüsselbeziehungen sind, die Du einmal bei den Modell-Klassen als `relation()` definierst. Das wird erst wieder interessant wenn es um Effizienz geht, oder „ungewöhnliche” Sachen abgefragt werden sollen.

Re: sqlalchemy

Verfasst: Mittwoch 7. August 2013, 11:30
von The Hit-Man
Eigentlich bin ich ja nur reines SQL gewöhnt. Wie ist das eigentlich? Kann ich unter sqlalechemy auch normale SQL-Abfragen machen? Und wenn, wie würde das gehen?

Re: sqlalchemy

Verfasst: Mittwoch 7. August 2013, 11:39
von EyDu
The Hit-Man hat geschrieben:Eigentlich bin ich ja nur reines SQL gewöhnt. Wie ist das eigentlich? Kann ich unter sqlalechemy auch normale SQL-Abfragen machen? Und wenn, wie würde das gehen?
Vielleicht solltest du einfach das von dir verlinkte Tutorial durcharbeiten ;-)

Re: sqlalchemy

Verfasst: Mittwoch 7. August 2013, 16:12
von The Hit-Man
Bin ich bei ;)

Re: sqlalchemy

Verfasst: Donnerstag 8. August 2013, 14:40
von The Hit-Man
Jetzt stehe ich wieder vor einem Problem. Als Gui wollte ich wxpython nehmen. Nur das gibt es noch nicht für Python3. Was kann man denn jetzt da machen? Python3 brauche ich doch für die neue sqlalchemy?

Re: sqlalchemy

Verfasst: Donnerstag 8. August 2013, 16:57
von BlackJack
@The Hit-Man: Wie kommst Du darauf das man Python 3 braucht? Selbst bei der 8.x Beta steht das man Python 2.5+ verwenden kann.

Re: sqlalchemy

Verfasst: Donnerstag 8. August 2013, 17:36
von The Hit-Man
War ich einfach von ausgegangen. Habe mir dann jetzt python2 installiert ...

Re: sqlalchemy

Verfasst: Montag 12. August 2013, 17:47
von Hyperion
Wobei Du unabhängig von dieser Frage die Wahl von wx in Frage stellen solltest. Das Toolkit bietet nichts, was irgend wie besonders (gut) wäre. Simpel und dabei wäre tk, umfassend und FullStack wären Qt und Gtk.

Es spricht imho nichts für wx, es sei denn, Du beherrschst wx eben schon... ;-)

Re: sqlalchemy

Verfasst: Montag 12. August 2013, 17:56
von BlackJack
@Hyperion: Für `wx` sprechen unter Windows die Lizenz und die relativ leichte Installierbarkeit. An der Lizenz kann es bei PyQt haken, und Gtk soll ein bisschen umständlich zu installieren sein.

Re: sqlalchemy

Verfasst: Mittwoch 4. September 2013, 16:53
von The Hit-Man
Also, ich hatte mir das wx angeeignet. Klar gibts hier und da mal nen paar Schwierigkeiten, wo ich lesen muß.