2010-03-04 8 views
3

Quelqu'un a-t-il un aperçu de l'organisation de projets basés sur sqlalchemy? J'ai beaucoup de tables et de classes avec des clés étrangères, et des relations. Que fait tout le monde en termes de séparation des classes, des tables et des mappeurs? Je suis relativement nouveau dans le cadre, donc toute aide serait appréciée.Organisation du fichier Sqlalchemy

Exemple:

classA.py # table definition and class A definition 
classB.py # table definition and class B definition 

### model.py 
import classA,classB 
map(classA.classA,clasSA.table) 
map(classB.classB,clasSB.table) 

Y compris cartographes intérieur CLASSA, et travaille ClassB, mais pose des problèmes croisés à l'importation lors de la construction des relations .. Peut-être que je manque quelque chose :)

Répondre

1

Il y a deux caractéristiques dans la conception SQLAlchemy pour éviter les importations croisées lors de la définition des relations:

  1. l'argument backref de relation() vous permet de définir le cadre arrière .
  2. Utilisation de chaînes (classe de modèle et noms de champs). Malheureusement cela ne fonctionne que pour le déclaratif, ce qui n'est pas votre cas.

Voir this chapter dans le didacticiel pour plus d'informations.

+0

Merci. J'ai pris le temps aujourd'hui de réécrire mon code aujourd'hui pour utiliser un style déclaratif. C'était soit cela, soit définir tous mes mappages après que toutes les classes aient été chargées. (ce qui était moche). –

1

Jetez un oeil à projet Pylons, y compris Configuration SA.

meta.py inclut le moteur et les objets métadonnées

modèles package comprend des classes declerative (pas mappeur nécessaire). À l'intérieur de ce paquet, structurez vos classes par relance en modules.

Peut-être un bon exemple serait le code source reddit :)

+1

@iElectric: Vous pouvez fournir un exemple d'arborescence de répertoires montrant les fichiers du paquet 'models'. –

+1

J'ai vérifié le code source pour reddit, mais ils définissent la plupart du code du modèle dans un fichier (bidding.py) (pour la section qui est gérée par sqlaclhemy). En général, j'ai du mal à trouver des exemples, au-delà de la simple définition d'un fichier. –