python读取配置文件连接数据库踩过的坑

橙三吉。 提交于 2020-01-15 14:44:42

python读取配置文件连接mysql遇到的问题

1.我创建了一个cfg.ini的配置文件,用于存放用到的配置,其中包含数据库的配置信息
2.使用configparser读取配置文件cfg.ini的数据库配置信息

[database]
host=172.16.1.11
port=3306
name=name
user=user
password=pass
charset=utf-8
 host=cf.get('database','host')
        port = cf.get('database','port')
        name = cf.get('database','name')
        user = cf.get('database','user')
        password = cf.get('database','password')

3.并使用pymysql.connect连接mysql数据库,遇到第一个问题如下,查阅资料后将charset=utf-8修改成charset=utf8,此问题解决

   self.encoding = charset_by_name(self.charset).encoding
AttributeError: 'NoneType' object has no attribute 'encoding'

4.再次连接数据库,返回错误1),将配置文件中的host值加上引号后再次连接数据库返回错误2)

1)  self.host_info = "socket %s:%d" % (self.host, self.port)
TypeError: %d format: a number is required, not str
pymysql.err.OperationalError: (2003, 'Can\'t connect to MySQL server on "\'172.16.1.11\'" ([Errno 8] nodename nor servname provided, or not known)')

5.我很肯定我配置文件里的用户名和密码是没有问题的,为了排查出问题所在,我将host和port直接复制,其他配置仍读取配置文件,报错如下

pymysql.err.OperationalError: (1045, "Access denied for user 'cat'@'172.21.110.89' (using password: YES)")

6.网上查了一下,说是用户名密码是正确的,是权限问题,本地ip没有权限访问,这肯定就不对了,因为我navicat也是直接本地ip访问的,未了验证问题,我引掉了连接配置文件数据的代码,直接赋值数据库信息

        '''
        conn = pymysql.connect(host='172.16.1.11',
                               port=3306,
                               user=user,
                               passwd=password,
                               db=name,
                               charset=charset)
        '''

        conn=pymysql.connect(host='172.16.1.11',
            port=3306,
            user='user',
            passwd='passwd',
            db='db',
            charset='utf8')

        

        cur=conn.cursor()
        cur.execute("select * from table'")

        result=cur.fetchall()
        print(result)

7.直接赋值数据,连接成功了,所以可以确定 1045的那个问题和权限是木有一分钱关系的,继续网上翻资料和不断是验证,最后我发现,使用 configparser读取处理的配置数据类型是str,于是我将使用配置文件数据连接的代码修改如下,port强制转换成int

 host=cf.get('database','host')
        port =int (cf.get('database','port'))
        name = cf.get('database','name')
        user = cf.get('database','user')
        password = cf.get('database','password')
        charset =cf.get('database','charset')
        print(host,port,name,user,password,charset)

        conn = pymysql.connect(host=host,
                               port=port,
                               user=user,
                               passwd=password,
                               db=name,
                               charset=charset)



        cur=conn.cursor()
        cur.execute("select * from table")

        result=cur.fetchall()
        print(result)

8.在我不懈努力的折腾下,最终数据库连接成功

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!