在Python 3中从phpmyadmin获取数据时出现问号

时间:2018-01-09 10:45:14

标签: mysql python-3.x phpmyadmin

您好我赢了10希腊。我想从mysql获取相同的数据(文件的路径)。问题是当我检索路径而不是我遇到的文件夹的名称时??????。代码示例如下

import pymysql as MySQLdb


dbid = "client"
password = "pass"
database = "clients"
serverip = "192.168.168.150"
db = None
cur = None
try:
    db = MySQLdb.connect(host=serverip, user=dbid, passwd=password, db=database, connect_timeout=20)
    cur = db.cursor()
except MySQLdb.Error as e:
    print("Cannot connect with the Data Base : "), e

query1 = "SELECT path FROM `instructions` WHERE clientmac ='%s'" % (str(5555))
try:
    row = None
    cur.execute(query1)
    db.commit()
    row = cur.fetchall()

except MySQLdb.Error as e:
    print("Problem while Executing query :", query1, "error : ", e)
print(row)
db.close()
cur.close()

Python 3使用Unicode,所以我认为问题不是来自python,而是来自phpmyadmin。字段路径是“utf8_general_ci”。一切看起来很好,但为什么而不是 'C:\\Users\\Γιαννης\\Documents\\Arduino'我收到了'C:\\Users\\???????\\Documents\\Arduino'

1 个答案:

答案 0 :(得分:0)

我找到了答案。在执行查询之前,我还要进行一些额外的编码。我发布下面的代码。

import pymysql as MySQLdb


dbid = "client"
password = "pass"
database = "clients"
serverip = "192.168.168.150"
socketip = "192.168.168.18"

db = None
cur = None
try:
    db = MySQLdb.connect(host=serverip, user=dbid, passwd=password, db=database, use_unicode=True, connect_timeout=20)
    cur = db.cursor()
except MySQLdb.Error as e:
    print("Cannot connect with the Data Base : "), e
query1 = "SELECT path FROM `instructions` WHERE clientmac ='%s'" % (str(5555))

try:
    row = None
    db.set_charset('utf8')
    cur.execute('SET NAMES utf8;')
    cur.execute('SET CHARACTER SET utf8;')
    cur.execute('SET character_set_connection=utf8;')
    cur.execute(query1)
    db.commit()
    row = cur.fetchall()

except MySQLdb.Error as e:
    print("Problem while Executing query :", query1, "error : ", e)
print(row)
db.close()
cur.close()