Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法

 更新时间:2018年01月11日 10:28:07   作者:郭一军_guoyJoe  
这篇文章主要介绍了Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法,涉及Python针对mysql数据库的连接、查询、csv格式数据文件的生成等相关操作技巧,需要的朋友可以参考下

本文实例讲述了Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法。分享给大家供大家参考,具体如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
 Purpose: 生成日汇总对账文件
 Created: 2015/4/27
 Modified:2015/5/1
 @author: guoyJoe
"""
#导入模块
import MySQLdb
import time
import datetime
import os
#日期
today = datetime.date.today()
yestoday = today - datetime.timedelta(days=1)
#对账日期
checkAcc_date = yestoday.strftime('%Y%m%d')
#对账文件目录
fileDir = "/u02/filesvrd/report"
#SQL语句
sqlStr1 = 'SELECT distinct pay_custid FROM dbpay.tb_pay_bill WHERE date_acct = %s'
#总笔数|成功交易笔数|成功交易金额|退货笔数|退货金额|撤销笔数|撤销金额
sqlStr2="""SELECT totalNum,succeedNum,succeedAmt,returnNum,returnAmt,revokeNum,revokeAmt
  FROM
    (SELECT count(order_id) AS totalNum
      FROM (SELECT p.order_id as order_id
        FROM dbpay.tb_pay_bill p, dbpay.tb_paybillserial q
        WHERE p.oid_billno = q.oid_billno
        AND p.paycust_accttype = 2
        AND p.Paycust_Type = 1
        AND p.stat_bill in (0, 4)
        AND q.pay_stat = 1
        AND q.col_stat = 1
        AND p.pay_custid = %s
        AND q.date_acct = %s
        UNION ALL
        SELECT p.order_id as order_id
        FROM dbpay.tb_pay_bill p, dbpay.tb_paybillserial q
        WHERE p.oid_billno = q.oid_billno
        AND p.col_accttype = 2
        AND p.col_type = 1
        AND p.stat_bill in (0, 4)
        AND q.pay_stat = 1
        AND q.col_stat = 1
        AND p.col_custid = %s
        AND q.date_acct = %s
        UNION ALL
        SELECT R.ORDER_ID AS ORDER_ID
        FROM DBPAY.TB_REFUND_BILL R, DBPAY.TB_PAYBILLSERIAL Q
        WHERE R.oid_refundno = Q.OID_BILLNO
         AND R.ORI_COL_ACCTTYPE = 2
         AND R.ORI_COL_TYPE = 1
         AND R.STAT_BILL = 2
         AND Q.PAY_STAT = 1
         AND Q.COL_STAT = 1
         AND R.ORI_COL_CUSTID = %s
         AND Q.DATE_ACCT = %s ) as total) A,
        (SELECT count(order_id) succeedNum ,sum(amt_paybill) succeedAmt
         FROM (SELECT p.order_id as order_id,
        q.amt_payserial/1000 as amt_paybill
        FROM dbpay.tb_pay_bill p, dbpay.tb_paybillserial q
        WHERE p.oid_billno = q.oid_billno
        AND p.paycust_accttype = 2
        AND p.Paycust_Type = 1
        AND p.stat_bill = '0'
        AND q.pay_stat = 1
        AND q.col_stat = 1
        AND p.pay_custid = %s
        AND q.date_acct = %s
        UNION ALL
        SELECT p.order_id as order_id,
        q.amt_payserial/1000 as amt_paybill
        FROM dbpay.tb_pay_bill p, dbpay.tb_paybillserial q
        WHERE p.oid_billno = q.oid_billno
        AND p.col_accttype = 2
        AND p.col_type = 1
        AND p.stat_bill = '0'
        AND q.pay_stat = 1
        AND q.col_stat = 1
        AND p.col_custid = %s
        AND q.date_acct = %s ) as succeed) B,
        (SELECT count(order_id) returnNum, sum(amt_paybill) returnAmt
        FROM (SELECT R.ORDER_ID AS ORDER_ID,
        Q.AMT_PAYSERIAL/1000 AS AMT_PAYBILL
        FROM DBPAY.TB_REFUND_BILL R, DBPAY.TB_PAYBILLSERIAL Q
        WHERE R.oid_refundno = Q.OID_BILLNO
         AND R.ORI_COL_ACCTTYPE = 2
         AND R.ORI_COL_TYPE = 1
         AND R.STAT_BILL = 2
         AND Q.PAY_STAT = 1
         AND Q.COL_STAT = 1
         AND R.ORI_COL_CUSTID = %s
         AND Q.DATE_ACCT = %s ) as retur) C,
         (SELECT count(order_id) revokeNum,sum(amt_paybill) revokeAmt
         FROM (SELECT p.order_id as order_id,
         q.amt_payserial/1000 as amt_paybill
         FROM dbpay.tb_pay_bill p, dbpay.tb_paybillserial q
        WHERE p.oid_billno = q.oid_billno
        AND p.paycust_accttype = 2
        AND p.Paycust_Type = 1
        AND p.stat_bill = '4'
        AND q.pay_stat = 1
        AND q.col_stat = 1
        AND p.pay_custid = %s
        AND q.date_acct = %s
        UNION ALL
        SELECT p.order_id as order_id,
        q.amt_payserial/1000 as amt_paybill
        FROM dbpay.tb_pay_bill p, dbpay.tb_paybillserial q
        WHERE p.oid_billno = q.oid_billno
        AND p.col_accttype = 2
        AND p.col_type = 1
        AND p.stat_bill = '4'
        AND q.pay_stat = 1
        AND q.col_stat = 1
        AND p.col_custid = %s
        AND q.date_acct = %s) as revok) D"""
try:
#连接MySQL数据库
  connDB= MySQLdb.connect("192.168.1.6","root","root","test" )
  connDB.select_db('test')
  curSql1 = connDB.cursor()
#查询商户
  curSql1.execute(sqlStr1,checkAcc_date)
  payCustID = curSql1.fetchall()
  if len(payCustID) < 1:
    print ('No found checkbill data,Please check the data for %s!' %checkAcc_date)
    exit(1)
  for row in payCustID:
      custid = row[0]
#创建汇总日账单文件名称
      fileName = '%s/JYMXSUM_%s_%s.csv' %(fileDir,custid,checkAcc_date)
#判断文件是否存在, 如果存在则删除文件,否则生成文件!
      if os.path.exists(fileName):
        os.remove(fileName)
      print 'The file start generating! %s' %time.strftime('%Y-%m-%d %H:%M:%S')
      print '%s' %fileName
#打开游标
      curSql2= connDB.cursor()
#执行SQL
      checkAcc_date = yestoday.strftime('%Y%m%d')
      curSql2.execute(sqlStr2,(custid,checkAcc_date,custid,checkAcc_date,custid,checkAcc_date,custid,checkAcc_date,c
ustid,checkAcc_date,custid,checkAcc_date,custid,checkAcc_date,custid,checkAcc_date))
#获取数据
      datesumpay = curSql2.fetchall()
#打开文件
      outfile = open(fileName,'w')
      for sumpay in datesumpay:
        totalNum = sumpay[0]
        succeedNum = sumpay[1]
        succeedAmt= sumpay[2]
        returnNum = sumpay[3]
        returnAmt = sumpay[4]
        revokeNum = sumpay[5]
        revokeAmt = sumpay[6]
#生成汇总日账单文件
        outfile.write('%s|%s|%s|%s|%s|%s|%s\n' %(totalNum,succeedNum,succeedAmt,returnNum,returnAmt,revokeNum,revo
keAmt))
      outfile.flush()
      curSql2.close()
  curSql1.close()
  connDB.close()
  print 'The file has been generated! %s' %time.strftime('%Y-%m-%d %H:%M:%S')
except MySQLdb.Error,err_msg:
  print "MySQL error msg:",err_msg

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python常见数据库操作技巧汇总》、《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • Python强大的自省机制详解

    Python强大的自省机制详解

    这篇文章主要为大家介绍了Python强大的自省机制,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • 数据清洗之如何用一行Python代码去掉文本中的各种符号

    数据清洗之如何用一行Python代码去掉文本中的各种符号

    我们在处理文本的时候往往需要对标点符号进行处理,下面这篇文章主要给大家介绍了关于数据清洗之如何用一行Python代码去掉文本中的各种符号的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • PyTorch零基础入门之逻辑斯蒂回归

    PyTorch零基础入门之逻辑斯蒂回归

    PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序,它是一个可续计算包,提供两个高级功能:1、具有强大的GPU加速的张量计算(如NumPy)。2、包含自动求导系统的深度神经网络
    2021-10-10
  • Django中的CBV和FBV示例介绍

    Django中的CBV和FBV示例介绍

    这篇文章主要给大家介绍了关于Django中CBV和FBV的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-02-02
  • Python中6种中文文本情感分析的方法详解

    Python中6种中文文本情感分析的方法详解

    中文文本情感分析是一种将自然语言处理技术应用于文本数据的方法,它可以帮助我们了解文本中所表达的情感倾向,Python中就有多种方法可以进行中文文本情感分析,下面就来和大家简单讲讲
    2023-06-06
  • Python中的内存管理之python list内存使用详解

    Python中的内存管理之python list内存使用详解

    这篇文章主要介绍了Python中的内存管理之python list内存使用详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • python实现JAVA源代码从ANSI到UTF-8的批量转换方法

    python实现JAVA源代码从ANSI到UTF-8的批量转换方法

    这篇文章主要介绍了python实现JAVA源代码从ANSI到UTF-8的批量转换方法,涉及Python针对文件操作与编码转换的相关技巧,需要的朋友可以参考下
    2015-08-08
  • 详解numpy.meshgrid()方法使用

    详解numpy.meshgrid()方法使用

    这篇文章主要介绍了详解numpy.meshgrid()方法使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 详解pandas删除缺失数据(pd.dropna()方法)

    详解pandas删除缺失数据(pd.dropna()方法)

    这篇文章主要介绍了pandas删除缺失数据(pd.dropna()方法),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • Python切片操作去除字符串首尾的空格

    Python切片操作去除字符串首尾的空格

    这篇文章主要介绍了Python切片操作去除字符串首尾的空格 的相关资料,需要的朋友可以参考下
    2019-04-04

最新评论