zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    MYSQL分库分表
    MYSQL主从数据库
    mysql not in用法
    python 文件及目录操作
    python 读写文件
    python字符编码
    python类的继承、封装和多态
    python之定义类创建实例
    理解OSI参考模型
    python闭包与装饰器
  • 原文地址:https://www.cnblogs.com/jincieryi/p/12679888.html
Copyright © 2011-2022 走看看