Immobilienportal
@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.
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.
@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.
@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: 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.
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.
Die Anleitung ist leider ziemlich "spartanisch":
http://www.postgresql.org/docs/9.4/inte ... start.html
pgAdmin III habe ich auch einmal installiert.
- 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
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!
have a lot of fun!
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()
@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))
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']