首先,您可以使用以下命令连接到您的数据库吗?
import pymysql
conn = pymysql.connect(host='localhost',
port=3306,
user='myusername',
passwd='mypasswd')
如果这不起作用,那么您可能还有其他问题(例如,您的数据库可能配置为仅通过套接字连接本地客户端)
至于配置文件,我认为如果您删除引号,这将起作用,如下所示:
[client]
host = localhost
port = 3306
user = myusername
password = mypassword
我将您的配置文件保存为test.cnf
并运行以下代码
# test.cnf
[client]
host = 'localhost'
port = 3306
user = myusername
password = "mypassword"
$ python3
>>> import configparser
>>> reader = configparser.RawConfigParser()
>>> reader.read('test.cnf')
>>> reader.get('client', 'host')
"'localhost'"
>>> reader.get('client', 'user')
'myusername'
如您所见,配置解析器将引号视为值的一部分。
更新:解决方法
OP 提到了提供的解决方案(即删除引号并没有解决他面临的问题)。这是实现配置/连接属性与程序逻辑分离的解决方法。
将配置保存在名为 dbsettings.py 的 python 文件中。
# dbsettings.py
connection_properties = {
'host': 'localhost',
'port': 3306,
'user': 'myusername',
'passwd': 'mypassword'
}
然后在您的主程序中使用以下几行来设置连接。
try:
from dbsettings import connection_properties
self.conn = pymysql.connect(**connection_properties)
self.curr = self.conn.cursor()
except pymysql.err.OperationalError :
sys.exit("Invalid Input: Wrong username/database or password found, please try again")
如果您的整个程序是用 python 编写的,那么这允许将连接/配置信息与程序逻辑分离,就像使用 my.cnf 方法一样,如果不是这样,它也同样灵活。但是,如果其他非 python 脚本需要引用 my.cnf 文件,那么您必须维护两个单独的 mysql 配置文件。