2010-04-21 5 views
7

J'ai un projet Pylons et un modèle SQLAlchemy qui implémente schéma des tables qualifiés:Tables qualifiées avec SQLAlchemy, SQLite et 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')) 

Ce code fonctionne très bien avec Postgresql mais échoue lors de l'utilisation SQLite sur la table et les clés étrangères (en raison du manque de SQLite de soutien de schéma)

sqlalchemy.exc.OperationalError: (OperationalError) base de données inconnue "hiver" 'PRAGMA "hiver" .table_info ("hockey")'()

Je voudrais continuer à utiliser SQLite pour dev et test.

Y a-t-il un moyen d'avoir cela échouer gracieusement sur SQLite?

+2

Quelles difficultés avez-vous avec Postgres sur vos dev et machines de test? –

+4

Je simplifierais votre installation.Utilisez Postgres de bout en bout. Ne testez pas sur SQLIte et libérez sur Postgres. – Kuberchaun

+1

Coller avec SQLite permet un flux de travail plus facile, en particulier pour les gens de QA car ils ne doivent pas être conscients de leurs tests db. Juste aller avec Postgres partout est un plan solide "B" –

Répondre

11

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

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

Il est difficile de savoir par où commencer avec ce genre de question. Alors . . .

Arrêtez-le. Arrête juste ça.

Certains développeurs n'ont pas le luxe de développer sur leur plate-forme cible. Leur vie est dure - déplacer le code (et parfois les compilateurs) d'un environnement à l'autre, déboguer deux fois (parfois en déboguant à distance sur la plate-forme cible), en prenant progressivement conscience que le rongement de leur intestin est en réalité le début d'un ulcère.

Installez PostgreSQL.

Lorsque vous pouvez utiliser le même environnement de base de données pour le développement, le test et le déploiement, vous devriez .

Sans oublier l'équipe d'assurance qualité. Pourquoi diable testent-ils des choses qu'ils ne vont pas envoyer? Si vous déployez sur PostgreSQL, assurez la qualité de votre travail sur PostgreSQL.

Sérieusement.

+0

Ma modification est apparue comme une nouvelle réponse. Cette réponse a mon texte intégral. L'autre manque mon souci évident pour toutes les bonnes personnes dans QA. –

+0

Si un serveur accessible à tous pour le développement et les tests est disponible, PostgreSQL peut être installé là-bas au lieu de localement sur toutes les machines. Cela faciliterait le fardeau des testeurs puisqu'ils n'auraient pas besoin de l'installer. – jpmc26

2

Je suis un débutant moi-même, et je n'ai pas utilisé Pylônes, mais ...

Je remarque que vous regroupez la table et la classe associée ensemble. Et si vous les séparez?

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() 

Ensuite, vous pouvez créer un séparé

class Hockey(Object): 
    ... 

et

mapper(Hockey, hockey_table) 

schéma Ensuite vient de mettre au-dessus = Aucun partout si vous utilisez SQLite, et la valeur (s) que vous voulez autrement.

Vous n'avez pas d'exemple fonctionnel, donc l'exemple ci-dessus n'est pas non plus un travail. Cependant, comme d'autres personnes l'ont souligné, essayer de maintenir la portabilité entre les bases de données est finalement un jeu perdant. J'ajouterais un +1 aux personnes suggérant que vous utilisiez simplement PostgreSQL partout.

HTH, Cordialement.

+0

Qu'en est-il des personnes qui ont une politique de coopération en utilisant MSSQL (produit Windows) alors que le développement d'applications se fait du côté Linux? Bien qu'il soit vraiment cool d'utiliser PostgreSQL étant donné la quantité de données qui se trouvent sur les données actuelles, la migration est loin dans le futur. – Thornhale

Questions connexes