• Python 数据库Insert语句脚本生成工具(SQL Server)


    编写这个小工具,是因为平时部署项目的时候,需要导出一些公共的数据(权限、参数设置等),覆盖插入正式环境。

    话不多说,直接上代码:

    import pyodbc
    import warnings
    import decimal
    import winreg
    import os
    import configparser
    import time
    import datetime
    
    warnings.filterwarnings('ignore')
    
    def link():
        root_dir = os.path.split(os.path.realpath(__file__))[0]# 获取当前文件所在目录的上一级目录,即项目所在目录
        configPath = os.path.join(root_dir, "config.txt")
        cf = configparser.ConfigParser()
        cf.read(configPath)  # 拼接得到config.txt文件的路径,直接使用
    
        # 数据库服务器信息
        driver = cf.get("Mssql-Database", "driver")  # 因版本不同而异
        server = cf.get("Mssql-Database", "server")  
        user = cf.get("Mssql-Database", "user")
        password = cf.get("Mssql-Database", "password")
        database = cf.get("Mssql-Database", "database")
        table = cf.get("Mssql-Database", "table")
     
        conn = pyodbc.connect(driver=driver, server=server, user=user, password=password, database=database) #数据库链接
     
        cur = conn.cursor()#开启
    
        arr = table.split(',') #多个表查询,用逗号隔开','
        path = get_desktop() + "\SqlDataScript"
    
        if not os.path.exists(path):
                os.mkdir(path)
    
        for ar in arr:
            sql='SELECT * FROM %s;'%ar #执行查询
            print(sql)  # 查询语句
            cur.execute(sql)
            rows = cur.fetchall()  # list
    
            index = cur.description
    
            f = open(path +"\"+ ar +"("+ time.strftime('%Y%m%d%H%M%S') +")" +".sql","w+",encoding='utf-8') #生成脚本(表名+时间戳为文件名)
            #拼接insert语句
            for res in rows:
                sqlText = 'INSERT INTO %s('%ar
                sqlVal = 'VALUES('
    
                for i in range(len(index)):
                    sqlText = sqlText + index[i][0] +','#字段名
                    if type(res[i]) == datetime.datetime: #时间格式字段,保留时分秒(不限制的话,有时候生成的毫秒格式有问题)
                        sqlVal = sqlVal + "'%s',"%res[i].strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
                    else:
                        sqlVal = sqlVal + "'%s',"%res[i] #字段内容
    
                sqlVal = sqlVal.strip(',') + ')' #去除最后的','
                sqlText = sqlText.strip(',') + ')' +' '+ sqlVal + ';' #字段名 + 字段内容
                print(sqlText) #打印sql
                f.write("%s
    " % sqlText) #文件写入
    
            f.close()
    
        conn.close() #关闭数据库链接
    
        os.system("start explorer "+ path) #打开文件存放目录
    
    # 获取桌面路径
    def get_desktop():
        key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'SoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders')
        return winreg.QueryValueEx(key, "Desktop")[0]
    
    if __name__=='__main__':
        link()

    执行完的效果展示:

    表名加时间戳命名,临时存放桌面文件夹,并自动打开文件夹(方便查看,不用去找)。

    config.txt  配置文件,搭配使用,需要访问什么数据库直接改配置文件即可。

    数据库访问地址要带上端口号192.168.1.222,1433

    python 打包exe:

    找到文件所在目录

    执行脚本pyinstaller -F BackUp.py

    打包成功,exe生成的路径如下:

    改个名字,把config文件一起配合使用即可。大功告成~

    附上百度云的共享地址:

    链接:https://pan.baidu.com/s/1AyvUDNDM2lBZlHmQNanpbA 
    提取码:2qkm

  • 相关阅读:
    phpcms后台进入地址(包含No permission resources错误)
    phpmyadmin上传大sql文件办法
    ubuntu彻底卸载mysql
    Hdoj 2602.Bone Collector 题解
    一篇看懂词向量
    Hdoj 1905.Pseudoprime numbers 题解
    The Python Challenge 谜题全解(持续更新)
    Hdoj 2289.Cup 题解
    Hdoj 2899.Strange fuction 题解
    Hdoj 2199.Can you solve this equation? 题解
  • 原文地址:https://www.cnblogs.com/jincieryi/p/12679888.html
Copyright © 2020-2023  润新知