如何实现PyMySQL中的DictCursor功能

大家都知道,在使用pymysql时,连接mysql数据库时,我们可以让其只输出值,也可以把列名和值对应输出。

  1. python连接MySQL的pymysql模块简单使用方式
#!/bin/env python

import pymysql

mysql_config = {
    'host':'localhost',
    'user':'test',
    'passwd':'test',
    'port':3306,
    'db':'test',
    'charset':'utf8mb4'

        }


####有key-value的方式输出
conn = pymysql.connect(**mysql_config)
cur = conn.cursor(pymysql.cursors.DictCursor)
sql = 'select * from t'
cur.execute(sql)
res = cur.fetchall()
print () 
print (res)
print ()
cur.close()
conn.close()


####只输出值
conn = pymysql.connect(**mysql_config)
cur = conn.cursor()
sql = 'select * from t'
cur.execute(sql)
res = cur.fetchall()
print ()
print (res)
print ()
cur.close()
conn.close()

输出结果如下:


如何实现PyMySQL中的DictCursor功能

pymysql的两种结果输出方式


2、见上图,通常情况下,第二种输出方式我们都会支持的。第一种输出方式未必支持,如果不支持的话,那么我们该如何实现呢?

想必大家也知道,伪代码大致思路如下:

  • 通过相关的连接信息,然后与数据建立连接
  • 获取数据库的表列信息
  • 获取数据库表的数据信息
  • 通过列信息和表的数据信息进行遍历,然后变相地实现dict的输出方式

最终的实现效果如下:


如何实现PyMySQL中的DictCursor功能


代码部分如下(以国产数据库SUNDB为例):

#!/bin/env python

import pysundb


cnxn = pysundb.connect( 'DSN=SUNDB;UID=test;PWD=test' )
sql="select * from TEST"


print ()
cursor = cnxn.cursor()
cursor.execute(sql)

rows = cursor.fetchall()

####获取列信息
des = cursor.description
print ("des: " + str(des) )


print () 
print (rows)


###把列和数据和列名一一对应
print ()
print ("*************")
resdic=[]
for i in rows:
    
    res = dict(zip([d[0] for d in cursor.description],i))
    resdic.append(res)
print (resdic)

cursor.close()
cnxn.close()


print ()

欢迎讨论~谢谢~

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章