2010-02-05 6 views
1

J'utilise Pylons + Python et j'essaie de comprendre comment se connecter à notre serveur de base de données central uniquement lorsque cela est nécessaire.Se connecter uniquement à la base de données si nécessaire

J'ai créé une classe appelée Central() que je voudrais instancier chaque fois qu'une connexion au serveur de base de données centrale est nécessaire, par exemple:

class Central(): 

def __init__(self): 

    engine = engine_from_config(config, 'sqlalchemy.central.')  
    central_db = create_engine(engine) 

    print central_db 

Toutefois, cela ne fonctionne pas quand je l'appelle:

c = DBConnect.Central() 

Quel est le code approprié pour ce faire?

Merci.

+0

par « ne fonctionne pas » voulez-vous dire que vous avez laissé le «soi» qui ferait les différentes valeurs partie de l'objet? Pouvez-vous fournir un message d'erreur ou un retraçage? –

Répondre

1

Puisque je ne peux pas dire quelle est la disposition de votre code, je peux seulement supposer que vous avez engine et central_db défini quelque part dans le contexte global. Est-ce exact? Si oui, vous pouvez essayer quelque chose comme ceci:

def __init__(self): 
    global engine 
    global central_db 
    engine = engine_from_config(config, 'sqlalchemy.central.')  
    central_db = create_engine(engine) 

Il fera référence à des objets globaux engine et central_db au lieu des locaux (comme Wim décrit)

0

Pouvez-vous définir "ne fonctionne pas"?

Si vous souhaitez utiliser central_db et engine plus tard, vous avez besoin de les stocker dans l'objet (utilisation self.central_db, self.engine, vous pouvez y accéder plus tard comme c.central_db et c.engine). Maintenant, ce ne sont que des variables locales qui sont détruites une fois que votre constructeur est fini.

+0

Je suis bombardé de toutes sortes d'erreurs. Quand j'implémente ce que vous suggérez, on me lance: NameError: le nom global 'engine' n'est pas défini – ensnare

+0

Si je change tout en self. Je reçois: AttributeError: l'objet 'Engine' n'a pas d'attribut 'get_dialect' – ensnare

Questions connexes