Problème d'organisation et d'accès au données - Python - Programmation
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
Marsh Posté le 09-12-2005 à 15:53:40
Certes, mais c'etait plus pour l'exemple là
Puis ça m'aide pas trop pour mon problème aussi
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?)
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 (si tu parles de unittest)
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
Citation : Ouais, d'ailleurs, chuis sympa, j'ai mis un exemple de ce que j'en ai fais |
Ca ressemble sûrement pas à un test unitaire ça
(au fait, t'es au courant que les constructeurs peuvent avoir des arguments?)
Marsh Posté le 09-12-2005 à 17:05:42
masklinn a écrit : ??? |
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 :
|
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).
Marsh Posté le 13-12-2005 à 21:56:59
Bon au fait, j'ai trouvé la super solution
j'avais pas capté que dans le module bli.gni je pouvais faire un import bli.Connection par ex.
Tout de suite, ça aide vachement
Merci masklinn
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 ( ), 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 ), 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
Tout aides & conseils sont les bienvenues
Message édité par multani le 09-12-2005 à 17:14:58