Проблема: Код компилируется отлично, но когда я вызываю функцию read_db_config, я получаю "Исключение: mysql не найден в файле mysql_config.ini"
Файл находится в том же каталоге, но главный script запускает два каталога с помощью
import sys
from Config.MySQL.python_mysql_dbconfig import read_db_config
Я новичок в python и искал везде, но я не могу точно определить свою проблему.
код:
from ConfigParser import ConfigParser
def read_db_config(filename='mysql_config.ini', section='mysql'):
# create parser and read ini configuration file
parser = ConfigParser()
parser.read(filename)
# get section, default to mysql
db = {}
if parser.has_section(section):
items = parser.items(section)
for item in items:
db[item[0]] = item[1]
else:
raise Exception('{0} not found in the {1} file'.format(section, filename))
return db
mysql_config.ini:
[mysql]
database = testdba
user = root
password = test
unix_socket = /opt/lampp/var/mysql/mysql.sock
если вы используете относительные пути для имен файлов или каталогов, python будет искать их (или создавать) в вашем текущем рабочем каталоге (переменная $PWD
в bash).
если вы хотите, чтобы они относились к текущему файлу python, вы можете использовать (python 3.4)
from pathlib import Path
HERE = Path(__file__).parent.resolve()
CONFIG_PATH = HERE / '../etc/mysql_config.ini'
или (python 2.7)
import os.path
HERE = os.path.abspath(os.path.dirname(__file__))
CONFIG_PATH = os.path.join(HERE, '../etc/mysql_config.ini')
если ваш файл mysql_config.ini
находится в каталоге etc
ниже вашего python script.
вы, конечно, всегда можете использовать абсолютные пути (начиная с /
, т.е. /home/someuser/mysql_config.ini
).
Я запустил его снова, но с модификацией добавления
parser = configparser.ConfigParser()
parser['mysql'] = {'database': 'testdba',
'user' : 'root',
'password' : 'test',
'unix_socket' : '/opt/lampp/var/mysql/mysql.sock'}
with open('mysql_config.ini', 'w') as configfile:
parser.write(configfile
и я обнаружил, что это создало файл "mysql_config.ini" не в каталоге, где был сохранен python "read_db_config", а родительский каталог основного модуля python, который вызывает этот модуль. Я немного искал его и выяснил решение perment, которое позволяет мне хранить "mysql_config.ini" там, где я хочу.
import configparser
def read_db_config(dirname = '/opt/Python_MySQL_Email_Receipt_Client/Config/MySQL/', filename='mysql_config.ini', section='mysql'):
# create parser and read ini configuration file
parser = configparser.ConfigParser()
parser.read(dirname + filename)
# get section, default to mysql
db = {}
if parser.has_section(section):
items = parser.items(section)
for item in items:
db[item[0]] = item[1]
else:
raise Exception('{0} not found in the {1} file'.format(section, filename))
return db