2010-04-21 4 views
7

Ich habe ein Pylonen-Projekt und ein SQLAlchemy Modell, das Schema qualifizierte Tabellen implementiert:Schema qualifizierte Tabellen mit SQLAlchemy, SQLite und Postgresql?

class Hockey(Base): 
    __tablename__ = "hockey" 
    __table_args__ = {'schema':'winter'} 
    hockey_id = sa.Column(sa.types.Integer, sa.Sequence('score_id_seq', optional=True), primary_key=True) 
    baseball_id = sa.Column(sa.types.Integer, sa.ForeignKey('summer.baseball.baseball_id')) 

Dieser Code mit Postgresql funktioniert gut, aber schlägt fehl, wenn SQLite auf Tabelle und Fremdschlüsselnamen (aufgrund SQLite Mangel an Schema-Unterstützung)

sqlalchemy.exc.OperationalError: (OperationalError) unbekannt Datenbank "winter" 'PRAGMA "winter" .table_info ("hockey")'()

Ich mag würde mit SQLite für Entwickler und Test fortzusetzen.

Gibt es eine Möglichkeit, dies auf SQLite ordnungsgemäß zu scheitern?

+2

Welche Schwierigkeiten haben Sie mit Postgres auf Ihren Entwicklungs- und Testmaschinen? –

+4

Ich würde Ihre Einrichtung einfacher machen.Nutzen Sie Postgres von Ende zu Ende. Testen Sie nicht auf SQLIte und veröffentlichen Sie nicht auf Postgres. – Kuberchaun

+1

Das Einhalten von SQLite erleichtert den Arbeitsablauf, vor allem für die QA-Leute, da sie ihre Test-Datenbank nicht kennen müssen. Einfach überall mit Postgres unterwegs ist ein solider Plan "B" –

Antwort

11

I'd like to continue using SQLite for dev and testing.

Is there a way of have this fail gracefully on SQLite?

Es ist schwer zu wissen, wo man mit dieser Frage anfangen soll. Damit . . .

Hör auf. Hör einfach auf.

Es gibt einige Entwickler, die nicht den Luxus haben, auf ihrer Zielplattform zu entwickeln. Ihr Leben ist hart - Moving Code (und manchmal Compiler) von einer Umgebung zur anderen, Debugging zweimal (manchmal Debuggen auf der Zielplattform remote) allmählich zu einem Bewusstsein, dass das Nagen in ihrem Bauch ist eigentlich die Beginn eines Geschwürs.

Installieren Sie PostgreSQL.

Wenn Sie können verwenden die gleiche Datenbank-Umgebung für Entwicklung, Test und Deployment, Sie sollte.

Ganz zu schweigen vom QA-Team. Warum in aller Welt testen sie Sachen, die sie nicht liefern werden? Wenn Sie PostgreSQL bereitstellen, stellen Sie die Qualität Ihrer Arbeit mit PostgreSQL sicher.

Ernsthaft.

+0

Mein Schnitt erschien als neue Antwort. Diese Antwort hat meinen vollständigen Text. Dem anderen fehlt meine auffällige Sorge um all die guten Leute in QA. –

+0

Wenn ein Server verfügbar ist, auf den alle für Entwicklung und Tests zugreifen können, kann PostgreSQL dort anstatt lokal auf allen Computern installiert werden. Dies würde die Belastung der Tester erleichtern, da sie diese nicht installieren müssen. – jpmc26

2

Ich bin nur ein Anfänger mich, und ich habe Pylonen nicht verwendet, aber ...

ich feststellen, dass Sie die Tabelle und die zugehörige Klasse zusammen kombinieren. Wie wäre es, wenn Sie sie trennen?

import sqlalchemy as sa 
meta = sa.MetaData('sqlite:///tutorial.sqlite') 
schema = None 
hockey_table = sa.Table('hockey', meta, 
         sa.Column('score_id', sa.types.Integer, sa.Sequence('score_id_seq', optional=True), primary_key=True), 
         sa.Column('baseball_id', sa.types.Integer, sa.ForeignKey('summer.baseball.baseball_id')), 
         schema = schema, 
        ) 

meta.create_all() 

Dann könnten Sie erstellen eine separate

class Hockey(Object): 
    ... 

und

mapper(Hockey, hockey_table) 

Dann einfach eingestellt Schema oben = Keine überall, wenn Sie SQLite verwenden, und der Wert (e) Sie wollen Andernfalls.

Sie haben kein funktionierendes Beispiel, das obige Beispiel funktioniert also auch nicht. Wie jedoch andere Leute darauf hingewiesen haben, ist der Versuch, die Portabilität über Datenbanken hinweg aufrecht zu erhalten, letztendlich ein Verlustspiel. Ich würde +1 zu den Leuten hinzufügen, die vorschlagen, dass Sie PostgreSQL überall nur benutzen.

HTH, Grüße.

+0

Was ist mit diesen Leuten, die eine Kooperationspolitik der Verwendung von MSSQL (Windows-Produkt) haben, während App-Entwicklung auf der Linux-Seite passiert? Während es angesichts der Datenmenge, die sich auf den aktuellen Daten befindet, wirklich toll wäre, PostgreSQL zu verwenden, ist die Migration weit in der Zukunft. – Thornhale

Verwandte Themen