此函数应连接到数据库,因为我使用了异常,当找到错误的输入时,我将获得自己创建的消息。但当我删除try时,除了我得到:“Acces拒绝/'user /'@'/'localhost'(使用密码:NO)。
它似乎没有读取我的密码我不知道为什么会得到一些帮助。没有这个文件连接到数据库工作正常没有任何错误。
try:
self.conn = pymysql.connect(read_default_file="~/my.cnf")
self.curr = self.conn.cursor()
except pymysql.err.OperationalError :
sys.exit("Invalid Input: Wrong username/database or password found, please try again")
.my.cnf文件中的信息是:
[客户]
host ='localhost'
port = 3306
user = myusername
password =“mypassword”
答案 0 :(得分:1)
您使用过:
pymysql.connect(read_default_file="~/my.cnf")
您应该使用:
pymysql.connect(read_default_file='~/.my.cnf',)
请注意文件名中缺少的点。您只是加载了一个不同的或不存在的文件。
正在展开~
,如下所示:
此外,我可以确认.my.cnf
文件中现在需要引号或空格:
echo -e "[client]\nuser=root\npassword=defaultrootpwd" > ~/.my.cnf
答案 1 :(得分:0)
首先,您可以使用以下命令连接到数据库。
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方法一样,并且如果不是mroe那么它也是如此灵活。但是,如果其他非python脚本需要引用my.cnf文件,那么你将不得不维护两个单独的mysql配置文件。