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

Posted

技术标签:

【中文标题】python中使用sql select的过程的奇怪结果【英文标题】:strange result of procedure with sql select in python 【发布时间】:2017-01-18 15:01:17 【问题描述】:

我已经在上面创建了数据库和表,其中包含有关软件版本、寻求更新的 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】:

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

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

而且您不需要每次都在getserverver 内打开一个连接(在该函数范围之外)打开它一次并重用它。打开数据库连接是一项昂贵的操作。

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

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

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

【讨论】:

@e4c5 是的,你说得对,谢谢。但是为什么现在函数返回的结果不是字典呢? 这是一个不同的问题。我相信我正确回答了原始问题。但是,请查看您通过评论提出的问题的更新。如果您有任何其他问题,请发布一个新问题。

以上是关于python中使用sql select的过程的奇怪结果的主要内容,如果未能解决你的问题,请参考以下文章

使用 python pymssql 调用 sql server 存储过程

在 SQL Server 2016 中调试一个关于存储过程执行的奇怪场景

Oracle sql 终止符筛选(+奇怪的行为)

SQL Server 中全文搜索的奇怪行为

如何在 select 语句的列列表中使用存储过程的结果?

python之路-----MySql操作三