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

标签 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)

每个字符串都有相同的数据,但它不是像这样在数据库中。我做错了什么(除了剥离 =))?

最佳答案

因为您一遍又一遍地执行相同的查询。尝试更改为

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

并且您不需要每次都在 getserverver 中打开连接(在该函数范围之外)打开一次并重新使用它。打开数据库连接是一项代价高昂的操作。

修复了此代码的原始问题后,如果您对为什么看不到字典感到困惑,那不是您打印它的方式!!

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

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

关于python - 在python中使用sql select的过程的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41722673/

相关文章:

python - 部署失败,因为有多个带有 Scrapinghub 的蜘蛛

python - 调用调用 API 操作失败并显示此消息 : Network Error

python - 使用 Tkinter 快速显示图像

python - 在 mac 上安装 pycurl

MySQL 计数行值 WHERE column = value

mysql - Innodb 表不存在

mysql - 以列表形式制作矩阵

用于检查数据框中是否存在用户输入值的 Python 脚本

python - pymysql如何为存储过程传递参数

mysql - (2059 ,“Authentication Plugin ' caching_sha2_password'”) 在 Django 上运行与 MYSQL 数据库连接的服务器时