问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

python 有没有把sql结果,直接写入文件的方法

发布网友 发布时间:2022-04-08 01:28

我来回答

4个回答

懂视网 时间:2022-04-08 05:49

Python学习第二弹

#coding = UTF-8

import os, sys, time, shutil

class NdbFlush:
    def __init__(self):
        self._ROOT_PATH_ = None
        self._TNS_LIST_ = {}
        self._FILE_LIST_ = {} # {SCHEMA:{‘TAB‘:[], ‘SEQ‘:[], ‘PKGH‘:[]}, SCHEMA:{...}, ...}
        self._ORA_CFG_FILE_ = None
    def _UnInit_(self):
        self._ROOT_PATH_ = None
        self._TNS_LIST_ = None
        self._FILE_LIST_ = None
        self._ORA_CFG_FILE_ = None
        

    #######################################
    # 设置路径
    #######################################
    def GetFilePath(self):
        expath = os.getcwd()
        if os.path.isdir(expath):
            return expath
        elif os.path.isfile(expath):
            return os.path.dirname(expath)

    #######################################
    # 获取连接串列表
    #######################################
    def GetOraInfo(self):
        ora_file = self._ROOT_PATH_ + ‘/‘ + self._ORA_CFG_FILE_
        tns_list = {}
        fh = open(ora_file, ‘r‘)
        for ora in fh.readlines():
            ora = ora.replace(‘
‘, ‘‘)
            if ora and len(ora) > 5:
                ora_list = []
                schema = ora.split(‘/‘)[0].upper()
                ora_list = tns_list.get(schema)
                if (ora_list and len(ora_list) > 0):
                    ora_list.append(ora)
                else:
                    ora_list = [ora]
                tns_list[schema] = ora_list
        return tns_list

    #######################################
    # 将SQL文件名称加载到列表中
    #######################################
    def LoadNdbList(self, _list_):
        #print(‘[LoadNdbList] _list_ =‘, _list_, ‘	len(_list_)‘, len(_list_))
        lst = {}
        try:
            for itm in _list_:
                #print(‘	ITM =‘, itm)            
                file_split = itm.split(‘_‘)
                #print(‘	file_split[0] =‘, file_split[0], ‘	file_split[1] =‘, file_split[1])
                #schema = {}
                files = []
                schema = lst.get(file_split[1].upper())
                #print(‘	schema =‘, schema)
                if schema and len(schema) > 0:
                    files = schema.get(file_split[0])
                    #print(‘		files =‘, files)
                    if files and len(files) > 0:
                        files.append(itm)
                        schema[file_split[0]] = files
                        #print(‘			files 1 =‘, files)
                        #print(‘			schema =‘, schema)
                    else:
                        files = [itm]
                        schema[file_split[0]] = files
                        #print(‘			files 2 =‘, files)
                else:
                    #print(‘	‘, schema, file_split[0], itm)
                    schema = {}
                    files =[itm]
                    schema[file_split[0]] = files
                #print(‘	schema =‘, schema)
                lst[file_split[1].upper()] = schema
                #print(‘	LST =‘, lst)
                #print(‘-‘ * 80)
        except Exception as e:
            #print(‘请传入数组类参数(如:元组[])
‘)
            print(e)
            lst = {}
        #print(lst)
        return lst

    #######################################
    # 获取SQL文件列表
    #######################################
    def GetSqlFileList(self):
        filelist = []
        sqlPath = self._ROOT_PATH_ + ‘/files/‘
        for file in os.listdir(sqlPath):
            if file[-4:].upper() == ‘.SQL‘:
                if filelist:
                    filelist.append(file)
                else:
                    filelist = [file]
        #print(‘

‘, filelist, ‘

‘)
        print(‘在目录[‘ + sqlPath + ‘]下找到[%d]个SQL文件‘ % len(filelist))
        return filelist

    #######################################
    # 将SQL刷入DB
    #######################################
    def SqlFlushDB(self, _runMode_ = ‘M‘):
        # schema loop
        file_list = self._FILE_LIST_
        ora_list = self._TNS_LIST_
        filePath = self._ROOT_PATH_ + ‘/files/‘
        for im in file_list:
            #print(‘schema =‘, im)#, lst.get(im))
                
            # file type loop begin
            # SEQ
            for xm in file_list.get(im):
                #print(‘	type =‘, xm, ‘
	list =‘, file_list.get(im).get(xm))
                if ‘SEQ‘ == xm.upper():
                    self.InitBat(im, file_list, ora_list, filePath, xm, _runMode_)
            # TAB
            for xm in file_list.get(im):
                #print(‘	type =‘, xm, ‘
	list =‘, file_list.get(im).get(xm))
                if ‘TAB‘ == xm.upper():
                    self.InitBat(im, file_list, ora_list, filePath, xm, _runMode_)
            # TAB
            for xm in file_list.get(im):
                #print(‘	type =‘, xm, ‘
	list =‘, file_list.get(im).get(xm))
                if ‘PKGH‘ == xm.upper():
                    self.InitBat(im, file_list, ora_list, filePath, xm, _runMode_)
            # not in (TAB, SEQ)
            for xm in file_list.get(im):
                #print(‘	type =‘, xm, ‘
	list =‘, file_list.get(im).get(xm))
                if ‘TAB‘ != xm.upper() and ‘SEQ‘ != xm.upper() and ‘PKGH‘ != xm.upper():
                    self.InitBat(im, file_list, ora_list, filePath, xm, _runMode_)
            # file type loop end

    def InitBat(self, _schema_, _fileList_, _oraList_, _filePath_, _fileType_, _runMode_ = ‘M‘):
        # file name loop
        for file in _fileList_.get(_schema_).get(_fileType_):
            #print(‘		‘, file)
            filePath = _filePath_
            sqlpath = filePath + file
            fh = open(sqlpath, ‘a+‘)
            fh.write(‘
exit‘)
            fh.close()

            tnslst = ‘‘
            # ora conf loop
            fht = open(sqlpath + ‘.bat‘, ‘a+‘)
            fht.write(‘title [‘ + file + ‘]
echo off
‘)
            fht.write(‘cd ‘ + filePath + ‘
‘)
            fht.write(‘cls


‘)
            # tns loop
            for tns in _oraList_.get(_schema_):
                #print(‘			‘, tns)
                tnslst += tns + ‘, ‘
                fht.write((‘@echo "[ %s ]‘ %file) + (‘ -> [ %s]"‘ %tns) + ‘

‘)
                fht.write(‘@echo 刷库中...

‘)
                fht.write(‘sqlplus ‘ + tns + ‘ @‘ + file + ‘ >> ‘ + file + ‘.log


‘)
                fht.flush()
            #fht.write(‘@pause
‘)
            fht.write(‘@echo FINISH>‘ + file + ‘.ok‘)
            fht.write(‘

exit‘)
            fht.close()
            print((‘[ %s ]‘ %file) + (‘ -> [ %s]‘ %tnslst))
            if _runMode_ == ‘M‘:
                self.RunBat(sqlpath, _runMode_)
            else:
                os.system(r‘‘ + sqlpath + ‘.bat‘)
            #time.sleep(1)

            try:
                fhl = open(r‘‘ + sqlpath + ‘.log‘, ‘r‘)
                lines = fhl.readlines()
                lineidx = 0
                errFlag = False
                fhl.close()
                for line in lines:
                    lineU = line.upper()
                    if lineU.find(‘ERROR‘) >= 0:
                        errFlag = True
                        break
                    lineidx += 1
                if errFlag:
                    print(‘	>>[Status] Failed..‘)
                    print(‘	  [ ‘ + lines[lineidx].replace(‘
‘, ‘‘) + ‘ ]‘)
                    print(‘	  [ ‘ + lines[lineidx + 1].replace(‘
‘, ‘‘) + ‘ ]‘)
                else:
                    print(‘	>>[Status] Success..‘)
                    if os.path.isfile(r‘‘ + sqlpath + ‘.log‘):
                        os.remove(r‘‘ + sqlpath + ‘.log‘)
                        shutil.move(sqlpath, sqlpath.replace(‘/files/‘, ‘/finish/‘))
            except Exception as e:
                print(‘	程序异常:‘, e)
                    
            print(‘-‘ * 70)


    def RunBat(self, _fileName_, _runMode_):
        state = ‘START‘
        while True:
        #print(runnext)
            if state == ‘START‘:
                os.system(‘start ‘ + r‘‘ + _fileName_ + ‘.bat‘)
                state = ‘RUNNING‘
                #print(1)
            elif state == ‘FINISH‘:
                #print(9)
                break
            elif state == ‘RUNNING‘:
                time.sleep(1)
                #print(2)
                try:
                    fh = open(r‘‘ + _fileName_ + ‘.ok‘, ‘r‘)
                    state = fh.read().replace(‘
‘, ‘‘)
                except:
                    state = ‘RUNNING‘
            else:
                break
            
    
    def CleanFile(self, _mode_ = ‘Finish‘):
        tmpPath = self._ROOT_PATH_ + ‘/files/‘
        for file in os.listdir(tmpPath):
            ffff = file.upper()
            delFlag = False
            if _mode_ == ‘Finish‘:
                if ffff[-4:] == ‘.BAT‘ or ffff[-7:] == ‘.SQL.OK‘:
                    delFlag = True
            else:
                if ffff[-4:] == ‘.LOG‘ or ffff[-4:] == ‘.BAT‘ or ffff[-7:] == ‘.SQL.OK‘:
                    delFlag = True
            if delFlag:
                tmpFile = os.path.join(tmpPath,  file) 
                if os.path.isfile(tmpFile):
                    os.remove(tmpFile)
            
    def Launcher(self):
            
        #l = [‘tab_lpms_xxx.sql‘, ‘tab_lpms_xx1x.sql‘, ‘tab_lpms_xxxxx.sql‘, ‘tab_wlt_xxx.sql‘, ‘seq_lpms_xxx.sql‘, ‘pkgh_jone_xxx.sql‘, ‘pkgb_jone_xxx.sql‘, ‘pubk_jone_xxx.sql‘]
        #self._FILE_LIST_ = self.LoadNdbList(l)
        # 清理历史bat文件

        self._ROOT_PATH_ = self.GetFilePath().replace(‘\‘, ‘/‘)
        print(‘工作目录:‘, self._ROOT_PATH_)


        _clean_ = True
        _show_list_ = False
        _dosMode_ = ‘M‘
        #workp = ‘D:/NdbFlush‘
        ipt = input(‘>>‘)
        ipt = ipt.upper()
        if ipt == ‘V‘:
            _show_list_ = True
        elif ipt == ‘D1‘:
            _dosMode_ = ‘S‘
        elif ipt == ‘D2‘:
            _dosMode_ = ‘M‘           
        elif ipt == ‘Q‘:
            exit()
        elif ipt == ‘C‘:
            _clean_ = True
        else:
            print(‘将以默认方式执行...‘)
        print(‘=‘ * 70)
        print(‘

‘)
        
        self.CleanFile(‘Begin‘)

        self._FILE_LIST_ = self.LoadNdbList(self.GetSqlFileList())

        # 显示文件清单 BEGIN
        if _show_list_:
            lst = self._FILE_LIST_
            for im in lst:
                # schema
                print(‘schema =‘, im)#, lst.get(im))
                for xm in lst.get(im):
                    # file type
                    print(‘	type =‘, xm, ‘
	list =‘, lst.get(im).get(xm))
        # 显示文件清单 END
        
        self._ORA_CFG_FILE_ = ‘ora_tns_info.conf‘
        self._TNS_LIST_ = self.GetOraInfo()        

        self.SqlFlushDB(_dosMode_)

        if _clean_:
            self.CleanFile()

        self._UnInit_()
        return self._FILE_LIST_, self._TNS_LIST_

       

def usage():
    print(‘=‘ * 70)
    print(‘=	[ NDB 刷库工具 ] v1.0‘)
    print(‘=	2015-07-05 by L‘)
    print(‘-‘ * 60)
    print(‘=	[ Q: 退出; ]‘)
    print(‘=	[ V: 显示录库的SQL列表; ]‘)
    print(‘=	[ D1: 单窗口执行; D2:多窗口执行[默认]; ]‘)
    print(‘=	[ 	执行前请确保: ‘)
    print(‘=	 		1)SQL:[$WorkPath$/files/]‘)
    print(‘=	 		2)TNS:[$WorkPath$/ora_tns_info.conf]‘)
    print(‘=	[ 回车继续; ]‘)
    print(‘=‘ * 70)
    
if __name__ == ‘__main__‘:
    usage()
    
    ndb = NdbFlush()
    lst, ora = ndb.Launcher()

    print(‘

‘)
    print(‘=‘ * 70)
    print(‘
‘)
    print(‘刷库动作完毕,执行结果详见上面日志,失败信息已写入对应log文件$WorkPath$/file/*.log...
[Enter]‘)
    input(‘‘)
    
   
    ‘‘‘
    print(‘[MAIN] lst =‘, lst)
    print(‘[MAIN] ora =‘, ora)
    print(‘

‘)
    
    print(‘



‘)
    print(‘-‘ * 100)
    print(‘



‘)
    for im in lst:
        # schema
        print(‘schema =‘, im)#, lst.get(im))
        for xm in lst.get(im):
            # file type
            print(‘	type =‘, xm, ‘
	list =‘, lst.get(im).get(xm))
    ‘‘‘


使用Python将sql文件刷入DB

标签:python   sql刷库   

热心网友 时间:2022-04-08 02:57

python把数据库查询结果写入文件的例子如下:
//以只读方式打开nodeset.txt
file_nodeset=open("nodeset.txt","r")
file_relationship=open("follower_followee.txt","a")
t=file_nodeset.readline()
while(''!=t):
cur=conn.cursor()
cur.execute("select * from follower_followee where followee_id=%s",t)
rows=cur.fetchall()//从数据库取出查询结果的一行
for row in rows: //开始循环处理
if (row[0] in nodeSet):
print('haha')
file_relationship.write('%s %s\n' % (row[0],row[1])) //写入文件
cur.close()
t=file_nodeset.readline()
file_nodeset.close()
file_relationship.close()

热心网友 时间:2022-04-08 04:15

应该没有,但你可以:

fp = file.open('F:/xxx.txt','wb')
fp.write(data)
fp.close

这样也可以达到你的目的

如果你想每次写入一个新的文件,就这样

filename = str(datetime.now()).replace(" ",'_').replace(":",'_') +
              str(random.randint(0,99))+'.txt'
fp = file.open('F:/'+ filename,'a+')
fp.write(data)
fp.close

每次写入一个新建的txt,名字为当前时间加随机数命名

热心网友 时间:2022-04-08 05:50

如果用的是mysql的话,OUTFILE就是把结果输出到文件的追问sql = 'SELECT * INTO OUTFILE "xxx.txt" FIELDS TERMINATED BY "\t" FROM table LIMIT 3;'
cursor.execute(sql)

为啥不行呢

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 阿诗顿空气炸锅 阿诗顿af280空气炸锅怎么样,好不好 qq会员怎样从阿狸字体变到红色字体? 怎么换回QQ会员的字体的红色啊? 卤鸡腿有很多工序,是先炸还是先卤呢? 办理电动车牌照需要带什么 充电宝能充蓝牙耳机怎么老是灭灯,灯灭了还在充吗? 卤鸡腿和炖鸡腿的区别? 充电宝给蓝牙耳机充不了电,用什么办法才行^ 卤鸡腿是先炸还是先卤呢? 先锋充电宝给蓝牙耳机充电怎么总停止 蓝牙耳机拿充电宝充电,为什么充到一半就不充了呢? 用小米充电宝怎么给蓝牙充电,充电一会就停然后按电源键又冲好麻烦? 为什么用充电宝给蓝牙耳机充电会断开 蓝牙耳机在充电过程中突然断电怎么修复? 小米移动电源给蓝牙耳机充电,插上去两分钟就断开了,再按一下电源开关就又两分钟 是怎么回事? 手机充 充电宝充不了蓝牙耳机?冲一会自动停了,怎么回事……小米充电宝,小米蓝牙耳机 棉花被子用多久换 给蓝牙耳机充电冲一会红灯就不亮了,换用充电宝充也是冲一会就不亮了,充电宝电也自动停了 地摊经济会带来什么商机? 艾美特空气炸锅质量好还是美的 羽绒服送干洗店洗了袖子薄了 为什么上海话听起来像日语?? 上海话跟日本话好像啊 为什么日语和上海话有那么多相近的地方,酷似吴语的一个分支? 上海话和日语有关系吗 上海话确实像日语,今天公交车上,我后面坐了一个上海人,我硬把他当成了日本人 不是有一种日语很像上海话吗?比如鞋子没坏鞋带先坏! 为什么韩语和日语同属一个语系?我觉得上海话比韩语更接近日语 上海话确实像日语,真的,你们不信去听听 上海人说对不起为什么像日语用词 日语发音最像中国哪种方言 用去逝母亲合影用作微信头像好吗? 中国方言哪个最像日语? 老妈过世了,我的微信头像的照片有老妈好吗? 上海话、苏州话、无锡话、宁波话。哪个听起来更像日语? 日语里哪些单词的读音和意思是和上海话一样的? 上海话和日语发音很像吗? 为什么我国南方有的地方的方言和日语听起来很像?难道是巧合? 日语上海话的梗