I used mysql_config_editorto create a .mylogin.cnfpassword file . I know that it worked correctly, because I can use it to connect through the command line utility mysqland the R package RMySQLwithout any problems.
However, when trying to connect using Mysql-Connector / Python:
import os
import mysql.connector
con = mysql.connector.connect(option_files=os.path.expanduser('~/.mylogin.cnf'))
or with PyMySQL:
import os
import pymysql
con = pymysql.connect(option_files=os.path.expanduser('~/.mylogin.cnf'))
I get the same error:
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-64-d17e56ef7010> in <module>()
/usr/local/lib/python3.5/site-packages/mysql/connector/__init__.py in connect(*args, **kwargs)
140
141 if 'option_files' in kwargs:
143 return connect(**new_config)
144
/usr/local/lib/python3.5/site-packages/mysql/connector/optionfiles.py in read_option_files(**config)
66 config['option_files'] = [config['option_files']]
67 option_parser = MySQLOptionsParser(list(config['option_files']),
69 del config['option_files']
70
/usr/local/lib/python3.5/site-packages/mysql/connector/optionfiles.py in __init__(self, files, keep_dashes)
162 self.files = files
163
165 self._sections = self.get_groups_as_dict()
166
/usr/local/lib/python3.5/site-packages/mysql/connector/optionfiles.py in _parse_options(self, files)
193 "than once in the list".format(file_))
194 with open(file_, 'r') as op_file:
196 if line.startswith('!includedir'):
197 _, dir_path = line.split(None, 1)
/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/encodings/ascii.py in decode(self, input, final)
24 class IncrementalDecoder(codecs.IncrementalDecoder):
25 def decode(self, input, final=False):
27
28 class StreamWriter(Codec,codecs.StreamWriter):
UnicodeDecodeError: 'ascii' codec can't decode byte 0x96 in position 28: ordinal not in range(128)
By configuring the source code, it looks like they are trying to read files in clear text. However, it mysql_config_editorencrypts the created login file. Both modules work fine when entering the password manually in the code.
How can I connect to Python using one of these generated configuration files? I am using Python 3, so MySQLdb is not an option.
update: RPy2 R Python. , .