Seite 1 von 1
SQLITE und MYSQL gleich ansprechen
Verfasst: Dienstag 8. April 2008, 15:58
von sprudel
Hallo,
Gibt es die Möglichkeit (außer SQLALCHEMY) die Datenbanktypen SQLITE und MYSQL gleich anzusprechen?
Das heißt beim execute z.B. der gleiche Platzhalter).
Ich dachte bisher ich könnte sqlite und mysql genau gleich ansprechen, wenn ich doch nur den Cursor auf eine Variable wie z.B. DB setze.
Doch das scheint nicht so zu funktionieren.
Python meldet
"Not all arguments converted during string formatting"
Scheint also was mit dem Platzhalter oder so nicht zu stimmen.
Hoffe ihr wisst Bescheid.
Gruß Chris
Verfasst: Dienstag 8. April 2008, 16:13
von Masaru
Hallo auch,
Schreib dir doch selber eine Interface-Mittelschicht und Wrapper für beide DatenbankManagementSysteme.
Wenn du plietsch bist, schreibst du dir PythonCode- oder JustInTime-Generatoren, um nicht sämtliche SQL-Statements doppelt, dreifach, ... oder wieviele DBMS du noch supporten möchtest, schreiben zu müssen.
>>Masaru<<
Verfasst: Dienstag 8. April 2008, 16:41
von sprudel
Hallo.
Das hab ich mir auch schon als - zugegeben eher unliebsame - Lösung überlegt. Eventuell auch eine Klasse die beides vereint.
Gibt es denn nicht noch andere Lösung?
Quasi eine Art "dbunited" Modul

Re: SQLITE und MYSQL gleich ansprechen
Verfasst: Dienstag 8. April 2008, 16:46
von Leonidas
sprudel hat geschrieben:Gibt es die Möglichkeit (außer SQLALCHEMY) die Datenbanktypen SQLITE und MYSQL gleich anzusprechen?
Gibt es einen speziellen Grund, warum du SQLAlchemy nicht magst?
Verfasst: Dienstag 8. April 2008, 16:48
von EyDu
Dazu gibt es etwas im Python-Cookbook:
"Using a Single Parameter-Passing Style Across Various DB API Modules", S. 323
Und daher sicherlich auch irgendwo in der Onlineausgabe.
Re: SQLITE und MYSQL gleich ansprechen
Verfasst: Dienstag 8. April 2008, 16:48
von sprudel
Leonidas hat geschrieben:sprudel hat geschrieben:Gibt es die Möglichkeit (außer SQLALCHEMY) die Datenbanktypen SQLITE und MYSQL gleich anzusprechen?
Gibt es einen speziellen Grund, warum du SQLAlchemy nicht magst?
Ich habe mir das mal ein bisschen angeguckt, und es wirkt alles so überladen. Oder ist es da auch einfach möglich ein Query auszuführen und dann die Werte ganz normal in einer While schleife zu iterieren?
Habe das überall im Internet nämlich ganz anders gesehen
Re: SQLITE und MYSQL gleich ansprechen
Verfasst: Dienstag 8. April 2008, 16:55
von Leonidas
sprudel hat geschrieben:Oder ist es da auch einfach möglich ein Query auszuführen und dann die Werte ganz normal in einer While schleife zu iterieren?
Habe das überall im Internet nämlich ganz anders gesehen
Aus dem Tutorial:
Code: Alles auswählen
>>> for user in session.query(User):
... print user.name
ed
wendy
mary
fred
Außerdem ist SQLAlchemy nicht das einzige ORM, es gibt durchaus noch weitere, die man sich ansehen könnte, wenn man damit wirklich nicht zurechtkommt.
Verfasst: Dienstag 8. April 2008, 17:01
von sprudel
Und wie mache ich überhaupt erst die Querys?
Ich werde mir das auf jeden Fall gleich mal angucken.
Danke - ihr habt mich hoffentlich von einer Eigenentwicklung bewahrt.
Verfasst: Dienstag 8. April 2008, 17:12
von Leonidas
sprudel hat geschrieben:Und wie mache ich überhaupt erst die Querys?
Ehm, du hast doch da ein Query welches alle User-Objekte aus der Datenbank holt?! Sieh dir doch mal das Tutorial an.
Verfasst: Dienstag 8. April 2008, 17:54
von sprudel
Leonidas hat geschrieben:sprudel hat geschrieben:Und wie mache ich überhaupt erst die Querys?
Ehm, du hast doch da ein Query welches alle User-Objekte aus der Datenbank holt?! Sieh dir doch mal das Tutorial an.
Hallo
nehmen wir jetzt einmal als Beispiel "Select id,fname,lname from users order by regdate desc limit 5"
ich möchte das jetzt in einer Schleife alles durchlaufen.
Geht das?
Bzw. wo finde ich überhaupt das Tutorial? In Google habe ich nur ein Englisches gefunden, stehe aber vermutlich dabei wieder ziemlich auf dem Schlauch.
Chris
Verfasst: Dienstag 8. April 2008, 19:17
von Sr4l
Es gibt nicht alles auf deutsch
SQLalchemy.org da gibt es das offizielle Tutorial.
aber das hier
http://entwickler.de/zonen/portale/psec ... ,1033.html ist auf deutsch und ähnlich aufgebaut.
Verfasst: Dienstag 8. April 2008, 19:20
von sprudel
Sr4l hat geschrieben:Es gibt nicht alles auf deutsch
Verlang ich doch auch nicht

Aber versteh doch - ich bin 16 Jahre alt. Da ist ein Fachenglisch gelegentlich schon zu viel verlangt, auch wenn ich mein Englisch in diesem Bereich als überdurchschnittlich einschätzt. Aber es macht das ganze leider ungemein schwerer.
Verfasst: Dienstag 8. April 2008, 23:05
von Leonidas
sprudel hat geschrieben:Aber versteh doch - ich bin 16 Jahre alt. Da ist ein Fachenglisch gelegentlich schon zu viel verlangt, auch wenn ich mein Englisch in diesem Bereich als überdurchschnittlich einschätzt. Aber es macht das ganze leider ungemein schwerer.
Uhh? Also mit 16 war das überhaupt kein Problem für mich. Außerdem ist IT-Englisch noch mal eine runde einfacher als normales, umgangssprachliches Englisch.
Wenn du dir das Tutorial angesehen hättest, könntest du durchaus drauf gekommen sein:
Code: Alles auswählen
import datetime
from sqlalchemy import desc, MetaData, Column, Unicode, DateTime, create_engine
from sqlalchemy.orm import sessionmaker, mapper
engine = create_engine('sqlite:///:memory:', echo=True)
metadata = MetaData()
users_table = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('fname', Unicode(40)),
Column('lname', Unicode(40)),
Column('regdate', DateTime)
)
metadata.create_all(engine)
class User(object): pass
mapper(User, users_table)
first_user = User()
first_user.fname = 'First'
first_user.lname = 'Last'
first_user.regdate = datetime.datetime.now()
Session = sessionmaker(bind=engine, autoflush=True, transactional=True)
session = Session()
session.save(first_user)
for user in session.query(User).order_by(desc(users_table.c.regdate)).all():
print user.fname, user.lname
Also eigentlich ist nur die vorletzte Zeile das Query, der Rest ist nur fürs Setup.
Verfasst: Mittwoch 9. April 2008, 08:46
von Masaru
Leonidas hat geschrieben:... Uhh? Also mit 16 war das überhaupt kein Problem für mich. Außerdem ist IT-Englisch noch mal eine runde einfacher als normales, umgangssprachliches Englisch. ...
Poser

Verfasst: Mittwoch 9. April 2008, 09:00
von Leonidas
Kann sich ja jeder ein Bild von machen:
ORM tutorial - sehr zu empfehlen (da ist auch beschrieben, dass man LIMIT mittels Slicing hinbekommt, was ich in meinem Beispiel nicht gezeigt habe). Ordering
ist hier dokumentiert und
desc() hat auch seine Dokumentation.
Es mag für den Anfang etwas komplex erscheinen, aber wenn man unbedingt will kann man mittels ``declarative`` sich das leben etwas vereinfachen oder mittels Elixir das Verhalten etwas an das von anderen ORMs anpassen, welche nach dem ActiveRecord-Pattern arbeiten, was für den Anfang oft simpler zu verstehen ist.
Verfasst: Mittwoch 9. April 2008, 11:24
von sprudel
Hallo.
Also ich werder mich einmal ein bisschen einlernen in Sqlalchemy. Das sieht interessanter aus als ich es für den ersten Blick gehalten habe
Zum Thema IT-Englisch:
Ich habe nicht wirklich große Probleme damit. Es ist nur mühselig wenn man etwas komplett neues lernt. Versteht mich nicht falsch

Verfasst: Mittwoch 9. April 2008, 17:52
von Hyperion
sprudel hat geschrieben:
Zum Thema IT-Englisch:
Ich habe nicht wirklich große Probleme damit. Es ist nur mühselig wenn man etwas komplett neues lernt. Versteht mich nicht falsch

Aber dennoch empfiehlt es sich die Scheuklappen fallen zu lassen, da:
1.) Diese Barriere ja durch Übung irgend wann quasi wegfällt! (Im Gegensatz zum generellen Stuidum von Dokus / Tutotials)
2.) Es gerade zu Schulzeiten noch eine gute Übung sein kann, sein Verständnis fürs Englische zu verbessern

(Zumal die Motivation hier sehr intrinsisch ist - im Gegensatz zu Hausaufgaben)
Also, ran an die Bulletten

Verfasst: Mittwoch 9. April 2008, 20:05
von sprudel
Hyperion hat geschrieben:sprudel hat geschrieben:
Zum Thema IT-Englisch:
Ich habe nicht wirklich große Probleme damit. Es ist nur mühselig wenn man etwas komplett neues lernt. Versteht mich nicht falsch

Aber dennoch empfiehlt es sich die Scheuklappen fallen zu lassen, da:
1.) Diese Barriere ja durch Übung irgend wann quasi wegfällt! (Im Gegensatz zum generellen Stuidum von Dokus / Tutotials)
2.) Es gerade zu Schulzeiten noch eine gute Übung sein kann, sein Verständnis fürs Englische zu verbessern

(Zumal die Motivation hier sehr intrinsisch ist - im Gegensatz zu Hausaufgaben)
Also, ran an die Bulletten

Nagut, ich werd mich dran wagen

Aber du bist schuld wenn ich nachher wieder englisch träume

Und bei driver nicht an Fahrer sondern Steuerungsprogamme denke

Ich schaff das schon.