2015-01-15 362 views
0

我试图用Python连接到mySql数据库。该数据库位于免费的虚拟主机服务器webzdarma.cz。连接到MySql服务器失败 - Python

我用mysql.connector.connect和我所有的论点是正确的在我看来。有关连接到数据库中的信息是:

This information is for PHP but I suppose it should work with Python: 
Server: mysql.webzdarma.cz 
Username: flat 
Database: flat 
Password: xxxx 

这是我的代码:

# -*- coding: utf-8 -*- 
    import mysql.connector 

    cnx = mysql.connector.connect(user='flat', password='xxxx', 
            host='mysql.webzdarma.cz', 
            database='flat') 

当尝试运行这段代码的错误occure:

Traceback (most recent call last): 
    File "C:/Users/Python/PycharmProjects/Flat/Flat.py", line 6, in <module> 
    database='flat') 
    File "C:\Python27\lib\site-packages\mysql\connector\__init__.py", line 159, in connect 
    return MySQLConnection(*args, **kwargs) 
    File "C:\Python27\lib\site-packages\mysql\connector\connection.py", line 129, in __init__ 
    self.connect(**kwargs) 
    File "C:\Python27\lib\site-packages\mysql\connector\connection.py", line 454, in connect 
    self._open_connection() 
    File "C:\Python27\lib\site-packages\mysql\connector\connection.py", line 417, in _open_connection 
    self._socket.open_connection() 
    File "C:\Python27\lib\site-packages\mysql\connector\network.py", line 470, in open_connection 
    errno=2003, values=(self.get_address(), _strioerror(err))) 
    File "C:\Python27\lib\site-packages\mysql\connector\errors.py", line 181, in __init__ 
    self.msg = self.msg % values 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf8 in position 15: ordinal not in range(128) 

这引发错误,因为程序收到关于连接失败的捷克语消息。 有谁知道我做错了什么?

回答

0

如果正如你所说,那么你没有做错什么 - MySQL提供者是。

避免这种错误的方法是将默认的Python编码设置为由远程端发回的 ,以便在出现 时能够“理解”错误消息。

要做到这一点,尽量做到: 进口SYS sys.setdefaultencoding函数(“”)

我不知道是哪个编解码器可能是 - 如果你没有一个简单的方法来知道 使用“latin1”作为编解码器 - 它会给你一个mojibake错误信息,但由于 所有的256字节代码都映射到unicode,所以你不会得到UnicodeDecodeError。

1
import MySQLdb 
db = MySQLdb.connect(host="mysql.webzdarma.cz", 
       user="flat", 
       passwd="xxxx", 
       db="flat") 
cur = db.cursor() 
cur.execute("SELECT * FROM YOUR_TABLE_NAME") 
res = cur.fetchall() 

试试这个会肯定有效。

更多细节如下问题问How do I connect to a MySQL Database in Python?

0

我碰到了我的本地开发机器上同样的问题,事实证明,我的MySQL服务没有启动和我同样的错误信息。开始实例,没有问题了!

我会看看我是否可以用MySQL连接器报告这个错误。