J'essaie de créer un script pour sauvegarder une base de données MySQL. J'ai un config.yml
fichier:
DB_Host :'localhost'
DB_USER : 'root'
DB_USER_PASSWORD:'P@$$w0rd'
DB_NAME : 'moodle_data'
BACKUP_PATH : '/var/lib/mysql/moodle_data'
Maintenant, je dois lire ce fichier. Mon Python jusqu'à présent:
import yaml
config = yaml.load(open('config.yml'))
print(config.DB_NAME)
Et voici l'erreur qui se produit:
file "conf.py", line 4, in <module>
print(config.DB_NAME)
AttributeError: 'str' object has no attribute 'DB_NAME'
Quelqu'un a-t-il une idée où j'ai fait une erreur?
Il y a 2 problèmes:
config['DB_NAME']
.Devrait fonctionner si le fichier est formaté comme ceci:
DB_Host: 'localhost'
DB_USER: 'root'
DB_USER_PASSWORD: 'P@$$w0rd'
DB_NAME: 'moodle_data'
BACKUP_PATH: '/var/lib/mysql/moodle_data'
Pour sauvegarder votre base de données , vous devriez pouvoir l'exporter sous forme de fichier .sql
. Si vous utilisez une interface spécifique, recherchez Export
.
Ensuite, pour l'analyseur yaml de Python.
DB_Host :'localhost'
DB_USER : 'root'
DB_USER_PASSWORD:'P@$$w0rd'
DB_NAME : 'moodle_data'
BACKUP_PATH : '/var/lib/mysql/moodle_data'
est une chose key-value
(désolé, je n'ai pas trouvé de meilleur mot pour celui-là). Dans certains langages (comme PHP je pense), ils sont convertis en objets. En python cependant, ils sont convertis en dicts (l'analyseur yaml le fait, l'analyseur JSON aussi).
# access an object's attribute
my_obj.attribute = 'something cool'
my_obj.attribute # something cool
del my_obj.attribute
my_obj.attribute # error
# access a dict's key's value
my_dict = {}
my_dict['hello'] = 'world!'
my_dict['hello'] # world!
del my_dict['hello']
my_dict['hello'] # error
Donc, c'est une présentation très rapide des dict, mais si vous vous lancez (exécutez help(dict)
, et/ou jetez un œil ici vous ne le regretterez pas)
Dans ton cas:
config['DB_NAME'] # moodle_data
Essaye ça:
import yaml
with open('config.yaml', 'r') as f:
doc = yaml.load(f)
Pour accéder à "DB_NAME", vous pouvez utiliser:
txt = doc["DB_NAME"]
print txt