PGSQL获取字典形式返回值并写入CSV

最近工作中开始使用PG库了,由于python中PG库的属性没有cursor属性设置(暂时没查到,问了大佬也说不知道),所以在字段比较多的时候不能像Mysql一样用Dictcursor直接用字典形式导出数据,所以学习了一个小方法,记录一下。

#连接数据库
def get_ptsql_con():
    return psycopg2.connect(host='a', port=xxxx, user='b', password='c', database='d')

#建立游标
conn = get_pgsql_con()
cursor = conn.cursor()
#查询数据
sql = "SELECT * FROM tmp_table WHERE id = 'xxxx' and id is not Null"
cursor.execute(sql)
#使用列表推到的形式简洁直观
coloumns = [row[0] for row in cursor.description]
result = [[str(item) for item in row] for row in cursor.fetchall()]
dict_result = [dict(zip(coloumns, row)) for row in result]
with open(ouput_file, 'wb') as f1:
    writer1 = csv.DictWriter(f1, coloumns)
    writer1.writeheader()
    writer1.writerows(dict_result)
    cursor.close()
    conn.close()

记录以下知识点:
1.cursor的属性中有rowcount和description两个属性:
①.cursor.rowcount可以直接获得记录数,用len()就像csv.reader之后len(reader)一样,内存可能会溢出;
②.cursor.description元组套元组形式的所以才有coloumns=[row[0] for row in cursor.description]
cursor.description = [coloumn(name=,type_code=)],所以拆包获取其中的列表信息

2.获取结果的列表推到很简单就不详细记录了,就是拆包的组合。

3.将结果写成字典形式,字典就是键值的映射,以前我只是在循环中使用zip可以同行读取多个可迭代对象的信息(ZIP太多对象的话效率非常差,数据量大会极大的降低运行效率,不建议使用
所以这里可以直接用dict(zip(iter1.iter2))就可以获取一列的字典形式数据,再拆包结果后就有所有的字典形式结果信息了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值