首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用加密选项文件将Python连接到MySQL

问使用加密选项文件将Python连接到MySQL
EN

Stack Overflow用户
提问于 2016-03-31 23:01:25
回答 1查看 2.3K关注 0票数 6

我使用mysql_config_editor创建了一个带有密码的.mylogin.cnf文件。我知道它工作正常,因为我可以使用它来通过命令行实用程序mysql和R包RMySQL进行连接,而不会出现问题。

但是,当尝试使用/Python连接时:

代码语言:javascript
复制
# using mysql-connector-python-rf
import os
import mysql.connector
con = mysql.connector.connect(option_files=os.path.expanduser('~/.mylogin.cnf'))

或者使用PyMySQL:

代码语言:javascript
复制
# using pymysql
import os
import pymysql
con = pymysql.connect(option_files=os.path.expanduser('~/.mylogin.cnf'))

我也犯了同样的错误:

代码语言:javascript
复制
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-64-d17e56ef7010> in <module>()
----> 1 con = mysql.connector.connect(option_files=os.path.expanduser('~/.mylogin.cnf'))

/usr/local/lib/python3.5/site-packages/mysql/connector/__init__.py in connect(*args, **kwargs)
    140     # Option files
    141     if 'option_files' in kwargs:
--> 142         new_config = read_option_files(**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']),
---> 68                                            keep_dashes=False)
     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 
--> 164         self._parse_options(list(self.files))
    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:
--> 195                     for line in op_file.readlines():
    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):
---> 26         return codecs.ascii_decode(input, self.errors)[0]
     27 
     28 class StreamWriter(Codec,codecs.StreamWriter):

UnicodeDecodeError: 'ascii' codec can't decode byte 0x96 in position 28: ordinal not in range(128)

浏览源代码后,这些代码看起来像是在试图以明文读取文件。但是,mysql_config_editor加密它生成的登录文件。当在代码中手动输入密码时,两个模块都可以正常工作。

如何使用这些生成的配置文件之一连接到Python?我正在使用Python3,所以MySQLdb不是一个选项。

更新:目前,我使用RPy2在R中运行查询,并将结果导入Python。代码有点难看,但工作流并没有那么糟糕。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-22 08:07:11

pip install myloginpath为我工作,然后:

代码语言:javascript
复制
import myloginpath
import pymysql
conf = myloginpath.parse('client')
db = pymysql.connect(**conf, host='mydbhost', db='whatever')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36345273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档