Python mysql 加密_使用加密的选项文件将Python连接到MySQL

这篇博客讨论了在Python中使用mysql_config_editor创建的加密.mylogin.cnf文件连接到MySQL时遇到的问题。尽管该文件在命令行和R包中有效,但使用Mysql-Connector / Python和PyMySQL时引发UnicodeDecodeError。原因是这些库尝试以明文方式读取加密文件。解决方案未在文中给出,但作者提到使用RPy2通过R运行查询作为替代方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我使用

mysql_config_editor创建一个带密码的.mylogin.cnf文件.我知道它工作正常,因为我可以使用它连接命令行实用程序mysql和R包R

MySQL没有问题.

但是,在尝试使用Mysql-Connector / Python进行连接时:

# using mysql-connector-python-rf

import os

import mysql.connector

con = mysql.connector.connect(option_files=os.path.expanduser('~/.mylogin.cnf'))

或者使用PyMySQL:

# using pymysql

import os

import pymysql

con = pymysql.connect(option_files=os.path.expanduser('~/.mylogin.cnf'))

我犯了同样的错误:

---------------------------------------------------------------------------

UnicodeDecodeError Traceback (most recent call last)

in ()

----> 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?我使用的是Python 3,所以MySQLdb不是一个选项.

更新:现在,我正在使用RPy2在R中运行查询并将结果传回Python.代码有点难看,但工作流程并不是那么糟糕.

import myloginpath

import pymysql

conf = myloginpath.parse('client')

db = pymysql.connect(**conf, host='mydbhost', db='whatever')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值