Immobilienportal

Django, Flask, Bottle, WSGI, CGI…
BlackJack

@DasIch: Unveränderbar ja aber auch nur in dem Sinn dass es nicht so einfach geht wie bei anderen DBMS. Man muss halt die Tabelle umbenennen, eine neue Veränderte anlegen, und die Daten dann kopieren. Macht etwas mehr Arbeit.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Sicherlich kann man dies tun aber das kopieren kostet Zeit, Zeit in der die Datenbank nicht erreichbar ist. Das spielt bei kleinen Datenbanken vielleicht keine große Rolle aber Datenbanken haben die Tendenz größer zu werden und früher oder später stört es dann schon.
BlackJack

@DasIch: Naja für richtig grosse Datenbestände die wirklich ständig verfügbar sein müssen würde ich SQLite natürlich nicht verwenden. Und bei Datenbeständen die mit der Zeit grösser werden: Man muss dann ja nicht bei SQLite bleiben.
Sirius3
User
Beiträge: 17752
Registriert: Sonntag 21. Oktober 2012, 17:20

@DasIch: das schöne, wenn man ein ORM wie SQLAlchemy nimmt, ist ja, dass man einfach eine Datenbank austauschen kann. Man nimmt SQLite zur Entwicklung, und wenn man dann wirklich ein Produktivsystem mit x-tausend Anfragen pro Sekunde aufbaut, wechselt man zu einer dafür besser geeigneten Datenbank.
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

Wird der Standardhoster um die Ecke Postgres eigentlich überhaupt unterstützen?
Sirius3
User
Beiträge: 17752
Registriert: Sonntag 21. Oktober 2012, 17:20

@meego: Was meinst Du mit Standardhoster? PostgreSQL ist nicht so resourcenhungrig, als dass es nicht auch auf einem kleinen Server laufen würde und wenn Dein Projekt eine gewisse Größe erreichen wird, wird Dir Dein Hoster um die Ecke sowieso nicht mehr reichen.
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

Naja, bei meinem (Metanet) habe ich im Admin gesehen, dass die eigentlich nur MySQL haben. Ich habe gestern mal Postgres gezogen und auf meinem Ubuntu installiert ("sudo apt-get install postgresql-9.4"). Allerdings konnte ich den Server nicht starten.

Die Anleitung ist leider ziemlich "spartanisch":
http://www.postgresql.org/docs/9.4/inte ... start.html

pgAdmin III habe ich auch einmal installiert.
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

Für den Anfang sollte es sqlite für dich tun. Da gibt es auch spatialite, womit du geographische Abfragen erstellen kannst.
Wenn du dann feststellst, das sqlite nichht mehr genügt, kannst du dich z.B. mit PostgreSQL befassen. Da ist der Umstieg recht einfach, M[y|aria]SQL hat das grössere Unterschiede, die man sich erarbeiten muß. Aber das wirst du bis dann selbst abschätzen können ;)

Gruß Uwe
---------------------------------
have a lot of fun!
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

Danke einem guten Tutorial weiss ich jetzt schon, wie ich dort Tabellen erstelle. Frage? Was wird mit dem gelobten bottle-sqlalchemy einfacher? Wie sehen dort die Befehle aus?

Code: Alles auswählen

import sqlite3
db = sqlite3.connect('picnic.db')
db.execute("CREATE TABLE picnic (id INTEGER PRIMARY KEY, item CHAR(100) NOT NULL, quant INTEGER NOT NULL)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('bread', 4)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('cheese', 2)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('grapes', 30)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('cake', 1)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('soda', 4)")
db.commit()
Sirius3
User
Beiträge: 17752
Registriert: Sonntag 21. Oktober 2012, 17:20

@meego: dank einem schlechten Tutorial weißt Du jetzt, wie man es nicht machen sollte!

Code: Alles auswählen

for item, quant in [('bread', 4), ('cheese', 2)]:
    db.execute("INSERT INTO picnic (item,quant) VALUES (?, ?)", (item, quant))
BlackJack

Speziell an der Stelle kann man auch `executemany()` erwähnen. :-)
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

Codeoptimierung ist immer möglich. Aber wo finde ich die Definition zu executemany()?

Code: Alles auswählen

dir(sqlite3)
['Binary', 'Cache', 'Connection', 'Cursor', 'DataError', 'DatabaseError', 'Date', 'DateFromTicks', 'Error', 'IntegrityError', 'InterfaceError', 'InternalError', 'NotSupportedError', 'OperationalError', 'OptimizedUnicode', 'PARSE_COLNAMES', 'PARSE_DECLTYPES', 'PrepareProtocol', 'ProgrammingError', 'Row', 'SQLITE_ALTER_TABLE', 'SQLITE_ANALYZE', 'SQLITE_ATTACH', 'SQLITE_CREATE_INDEX', 'SQLITE_CREATE_TABLE', 'SQLITE_CREATE_TEMP_INDEX', 'SQLITE_CREATE_TEMP_TABLE', 'SQLITE_CREATE_TEMP_TRIGGER', 'SQLITE_CREATE_TEMP_VIEW', 'SQLITE_CREATE_TRIGGER', 'SQLITE_CREATE_VIEW', 'SQLITE_DELETE', 'SQLITE_DENY', 'SQLITE_DETACH', 'SQLITE_DROP_INDEX', 'SQLITE_DROP_TABLE', 'SQLITE_DROP_TEMP_INDEX', 'SQLITE_DROP_TEMP_TABLE', 'SQLITE_DROP_TEMP_TRIGGER', 'SQLITE_DROP_TEMP_VIEW', 'SQLITE_DROP_TRIGGER', 'SQLITE_DROP_VIEW', 'SQLITE_IGNORE', 'SQLITE_INSERT', 'SQLITE_OK', 'SQLITE_PRAGMA', 'SQLITE_READ', 'SQLITE_REINDEX', 'SQLITE_SELECT', 'SQLITE_TRANSACTION', 'SQLITE_UPDATE', 'Statement', 'Time', 'TimeFromTicks', 'Timestamp', 'TimestampFromTicks', 'Warning', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'adapt', 'adapters', 'apilevel', 'collections', 'complete_statement', 'connect', 'converters', 'datetime', 'dbapi2', 'enable_callback_tracebacks', 'enable_shared_cache', 'paramstyle', 'register_adapter', 'register_converter', 'sqlite_version', 'sqlite_version_info', 'threadsafety', 'time', 'version', 'version_info', 'x']
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

meego hat geschrieben:Codeoptimierung ist immer möglich. Aber wo finde ich die Definition zu executemany()?
In der Doku?
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

Danke. Also vermutlich im Cursorobjekt.
Antworten