在python中使用sql select的程序的奇怪结果

时间:2017-01-18 15:01:18

标签: python mysql pymysql

我在其上创建了数据库和表格,其中包含有关软件版本的信息,用于查找更新的URL等。 我需要通过python从这个数据库中获取信息。 我创建了程序:

def getserverver(name):
    connection = pymysql.connect(host='localhost',
                             user='root',
                             password='mysql',
                             db='softupdates',
                             charset='utf8',
                             cursorclass=pymysql.cursors.DictCursor)
    with connection.cursor() as cursor:
     sql = "SELECT Name FROM softupdates.soft where Name like name"
     cursor.execute(sql)
     result = cursor.fetchone()
    return result

在以下之后使用它:

panorama12onserver = (getserverver('Профессиональная ГИС %Панорама %версия 12%x64%'))['Name']
panorama11onserver = (getserverver('Профессиональная ГИС %Карта 2011%'))['Name']
panedit11onserver = (getserverver('Профессиональный векторизатор %Панорама-редактор%версия 11%'))['Name']
panedit12onserver = (getserverver('Профессиональный векторизатор %Панорама-редактор%версия 12%x64%'))['Name']
print (panorama12onserver)
print (panorama11onserver)
print (panedit12onserver)
print (panedit11onserver)

为什么我得到这样的结果:

Профессиональная ГИС "Карта 2011" (версия 11.13.5.7)
Профессиональная ГИС "Карта 2011" (версия 11.13.5.7)
Профессиональная ГИС "Карта 2011" (версия 11.13.5.7)
Профессиональная ГИС "Карта 2011" (версия 11.13.5.7)

每个字符串上的相同数据,但它不像这样的数据库。我做错了什么(除了脱衣舞=))?

1 个答案:

答案 0 :(得分:2)

因为你一遍又一遍地执行同一个查询。尝试更改为

 sql = "SELECT Name FROM softupdates.soft where Name like %s"
 cursor.execute(sql, (name,))

每次在getserverver内打开一次(在该功能范围之外)并且重复使用它时,您不需要打开连接。打开数据库连接是一项代价高昂的操作。

修复了这段代码的原始问题,如果你为什么没有看到字典而破旧,那就不是你打印它的方式!!

(getserverver('Профессиональный векторизатор %Панорама-редактор%версия 12%x64%'))['Name']

这会返回标量值,而不是字典。