Problème d'organisation et d'accès au données

Problème d'organisation et d'accès au données - Python - Programmation

Marsh Posté le 09-12-2005 à 12:01:21    

Salut,
 
j'ai un problème d'organisation de mon code et d'accès à certaines de mes données. Mon projet est un truc web qui manipule une base de données. Pour l'instant, c'est organisé comme ça (c'est sujet à modifications d'ailleurs, chuis pas fixé la dessus) :


bli/
   __init__.py
   Base.py
   blu.py
   blo.py
   etc.py
   
config.py
tests.py


Le contenu du répertoire /bli/ contient des classes qui vont interagir avec la base de données (en gros, un truc du genre Active Record). Base est la super-classe à partir de laquelle dérive toutes les autres.
 
J'ai commencé à écrire mes tests unitaires (dans /tests.py) pour tester mon truc et config.py contient mes options de configuration (paramètre de connection à la BD, etc.) Ca ressemble à ça :


 def testBluLoad (self):
  """Test le chargement d'une carte déjà existante."""
  b1 = bli.blu()
  b1.name = "Home One"
  b1.id_truc = 1
  b1.machin = 1
  b1.save()
   
  b2 = bli.blu(b1.id)
  self.assertEqual(b1.id, b2.id)
  self.assertEqual(b1.name, b2.name)
  self.assertEqual(b1.id_truc, b2.id_truc)
  self.assertEqual(b1.machin, b2.machin)


Le problème, c'est la connection SQL. J'en ai forcément besoin dans mes classes de /bli/ . Actuellement, elle est ouverte dans tests.py, et à part la passer en paramètre à dans chaque constructeur de chaque classe ( [:pingouino] ), j'vois pas trop :/
Je me sers de pyscopg (interface pour PostgreSQL), je l'ai pas wrappé du tout.
 
Ce que j'aimerais, c'est ouvrir une connection globale à la BD quelque part (à définir [:dawa] ), et pouvoir la récupérer automatiquement dans le constructeur de Base par ex., sans que j'ai à la passer de partout (éventuellement, y'aura d'autres trucs qui fonctionneront de la même manière).
 
Voilà, donc c'est plus un problème d'organisation que j'ai [:dawa]
Tout aides & conseils sont les bienvenues [:romf]

Message cité 1 fois
Message édité par multani le 09-12-2005 à 17:14:58
Reply

Marsh Posté le 09-12-2005 à 12:01:21   

Reply

Marsh Posté le 09-12-2005 à 13:13:20    

multani a écrit :

Le contenu du répertoire /bli/ contient des classes qui vont interagir avec la base de données (en gros, un truc du genre Active Record). Base est la super-classe à partir de laquelle dérive toutes les autres.


On est pas en Java là, ça n'a aucun sens de mettre une classe par fichier [:moule_bite]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Marsh Posté le 09-12-2005 à 15:53:40    

Certes, mais c'etait plus pour l'exemple là [:dawao]
Puis ça m'aide pas trop pour mon problème aussi [:dawa]

Reply

Marsh Posté le 09-12-2005 à 16:02:41    

Oué mais stu veux vu la clarté de l'exposition du problème...
(nan paske t'es au courant qu'il y a un framework de tests unitaires en python?)


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Marsh Posté le 09-12-2005 à 16:10:38    

masklinn a écrit :

Oué mais stu veux vu la clarté de l'exposition du problème...


En gros : j'ai une hiérarchie de module (comme je l'ai présenté, ou un truc mieux). J'aimerais créer une connection à ma base de données dans un de mes scripts à la racine de mon projet, ou dans un des modules, et faire passer cette connection à mes autres modules. Et je voudrais savoir les solutions que je pourrais utiliser.

masklinn a écrit :

(nan paske t'es au courant qu'il y a un framework de tests unitaires en python?)


Ouais, d'ailleurs, chuis sympa, j'ai mis un exemple de ce que j'en ai fais [:dawa] (si tu parles de unittest)

Reply

Marsh Posté le 09-12-2005 à 16:14:26    

multani a écrit :

En gros : j'ai une hiérarchie de module (comme je l'ai présenté, ou un truc mieux). J'aimerais créer une connection à ma base de données dans un de mes scripts à la racine de mon projet, ou dans un des modules, et faire passer cette connection à mes autres modules. Et je voudrais savoir les solutions que je pourrais utiliser.


???
 
Singleton [:petrus dei]

Citation :

Ouais, d'ailleurs, chuis sympa, j'ai mis un exemple de ce que j'en ai fais [:dawa]


Ca ressemble sûrement pas à un test unitaire ça [:petrus75]
(au fait, t'es au courant que les constructeurs peuvent avoir des arguments?)


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Marsh Posté le 09-12-2005 à 17:05:42    

masklinn a écrit :

???
 
Singleton [:petrus dei]


Ouais, j'veux bien, mais je _vois_ pas comment le référencer :
 - je le fout où ? dans /, dans un module séparé, dans le même module que l'accès à ma base ?
 - si je le fout dans un un module séparé de celui qui accède à ma base, comment je le récupère ? Si j'ai un module /truc, et un module /machin (à priori pas dans le même espace de nom), je référence mon singleton comment ?
 
Ca parait con, sans doutes, mais j'ai du mal à saisir.

masklinn a écrit :


Citation :

Ouais, d'ailleurs, chuis sympa, j'ai mis un exemple de ce que j'en ai fais [:dawa]


Ca ressemble sûrement pas à un test unitaire ça [:petrus75]


D'accord, c'est ptêtre pas le meilleur exemple, je le corrige de suite.

masklinn a écrit :

(au fait, t'es au courant que les constructeurs peuvent avoir des arguments?)


Ouais. D'ailleurs, je pourrais arrêter de me prendre la tête et foutre mon objet sql_connection par là. Mais bon :/ (et oui, je ferais surement un constructeur qui prend un hash d'attributs en paramètre).

Reply

Marsh Posté le 13-12-2005 à 21:56:59    

Bon au fait, j'ai trouvé la super solution [:petrus75]
 
j'avais pas capté que dans le module bli.gni je pouvais faire un import bli.Connection par ex. [:petrus75]
 
Tout de suite, ça aide vachement [:petrus75]
 
Merci masklinn [:petrus75]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed