2010-10-24 26 views
1

J'ai une fonction nommée OpenAccount() qui reprend les détails de l'utilisateur et l'ajoute à mon dictionnaire de base de données.Ajout à l'exécution d'un dictionnaire

J'ai un fichier de base de données (module) qui est importé dans mon fichier de fonction.

J'ai une fonction appelée AppendRecord (clé, ** dictvalues) qui ajoute des valeurs à mon fichier de base de données.

Cependant, je ne suis pas en mesure d'appeler la fonction et de saisir des valeurs au moment de l'exécution pour l'ajouter. Cela fonctionne très bien avec les valeurs codées en dur.J'affiche le code.Veuillez m'aider.

def AppendRecord(key, **dictvalues): 
     salesDept[key] = dict(dictvalues) 

et l'appel à des valeurs codées en dur est ...

AppendRecord('Jill',Name='Jill', Acctype='Savings') 

Maintenant, quand j'essaie de prendre toutes les valeurs ainsi que la clé de l'utilisateur, je ne suis pas en mesure d'appeler le function.I'm un débutant à Python donc s'il vous plaît pardonnez-moi des erreurs:

Modifié le code:

#/usr/bin/python

import os  #This module is imported so as to use clear function in the while-loop 
import DB      #Imports the data from database DB.py 

def AppendRecord(key, **dictvalues): 
     DB.Accounts[key] = dict(dictvalues) 

def OpenAccount():   #Opens a new a/c and appends to the database data-base. 

     while True: 

       os.system("clear")  #Clears the screen once the loop is re-invoked 

#Parameters taken from the user at Run-time so as to make entries in the database and append them 


       print '\n','Choose an Account Type' 

       print '\n','\n1)Savings Account','\n2)Current Account' 

       choice = input('Enter an optin: ') 

       if choice == 1: 

         name = raw_input('\nEnter a name: ') 
         depo = input('\nEnter amount(Rs.): ') 
         key = raw_input('\nEnter an alphanumeric-id: ') 
         acc= raw_input('\nEnter the Account-Type: ') 

         AppendRecord(key,Name=name,Initial_deposit=depo,Acctype=acc) 

EDIT 1: Les erreurs que je reçois sont.

File "/usr/lib/python2.5/shelve.py", line 124, in __setitem__ 
    self.dict[key] = f.getvalue() 
TypeError: 'int' object does not support item assignment 

EDIT 2:

Voici le code source de fichiers de base de données DB.py.

#!/usr/bin/python 

import shelve     #Module:Shelve is imported to achieve persistence 

Victor = {'Name':'Victor Hughes','Acctype':'Savings'} 
Xavier = {'Name':'Xavier Bosco','Acctype':'Savings'} 
Louis = {'Name':'Louis Philip','Acctype':'Current'} 
Beverly = {'Name':'Beverly Dsilva','Acctype':'Current'} 

Accounts = shelve.open('shelfile.shl')   #Accounts = {} 

Accounts['Louis']= Louis 
Accounts['Beverly']= Beverly 
Accounts['Xavier']= Xavier 
Accounts['Victor']= Victor 

Accounts.close() 
+0

Qu'est-ce qui ne va pas? Y at-il des messages d'erreur? En outre, vous avez une faute de frappe (je pense que vous auriez une erreur sinon) dans votre appel codé en dur. Vous devriez seulement citer les économies et non l'argument mot clé entier. – aaronasterling

+0

aaronasterling - J'ai corrigé la faute de frappe. Merci.J'ai ajouté le message d'erreur, s'il vous plaît vérifier EDIT 1. – Pavitar

+0

Nous avons besoin de la retraçage ou plus de détails sur "pas en mesure d'appeler la fonction" afin que nous puissions vous aider. :) –

Répondre

1

Votre problème est que le module DB ferme l'étagère avant d'y écrire. Débarrassez-vous de la dernière ligne et cela fonctionnera bien.

Vous devrez également fournir une fonction pour le fermer ou le faire manuellement.

#!/usr/bin/python 

import shelve     #Module:Shelve is imported to achieve persistence 


Accounts = 0 

Victor = {'Name':'Victor Hughes','Acctype':'Savings'} #??? 
Xavier = {'Name':'Xavier Bosco','Acctype':'Savings'} 
Louis = {'Name':'Louis Philip','Acctype':'Current'} 
Beverly = {'Name':'Beverly Dsilva','Acctype':'Current'} 


def open_shelf(name='shelfile.shl'): 
    global Accounts 
    Accounts = shelve.open(name)   #Accounts = {} 
    # why are you adding this every time? is this just debugging code? 
    Accounts['Louis']= Louis 
    Accounts['Beverly']= Beverly 
    Accounts['Xavier']= Xavier 
    Accounts['Victor']= Victor 


def close_shelf(): 
    Accounts.close() 

Vous devez maintenant appeler la fonction DB.open_shelf() avant de vous écrire et à la fonction DB.close_shelf lorsque vous avez terminé. Je recommanderais de les appeler au début et à la fin de votre programme respectivement.

Vous remarquerez que cela ne fait qu'emballer shelve et ajouter une valeur à peu près nulle. Je voudrais jeter l'ensemble du module DB et utiliser directement shelve directement.

+0

Oui, juste un code de débogage. + 1 Merci que cela fonctionne bien avec votre réponse. Mais quand j'essaie de lire depuis 'shelfile.shl', je ne vois pas les valeurs ajoutées. :(Je suis confus – Pavitar