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

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

时间:2023-05-26 10:01:45浏览次数:64  
标签:Insert get Python SQL cf sqlVal import path os

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

话不多说,直接上代码:

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\r\n" % sqlText) #文件写入
 
        f.close()
 
    conn.close() #关闭数据库链接
 
    os.system("start explorer "+ path) #打开文件存放目录
 
# 获取桌面路径
def get_desktop():
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')
    return winreg.QueryValueEx(key, "Desktop")[0]
 
if __name__=='__main__':
    link()

执行完的效果展示:

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

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

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

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

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

python 打包exe:

找到文件所在目录

执行脚本pyinstaller -F BackUp.py

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

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

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

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

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

领取方式

有需要的可以自取~

关注公众号:编程如诗 ,回复 “数据库工具” 即可获取。

标签:Insert,get,Python,SQL,cf,sqlVal,import,path,os
From: https://blog.51cto.com/u_15949341/6353587

相关文章

  • python 判断列表是否为空
    python判断列表是否为空]'''判断列表是否为空'''if['a']:#不能写isTrueprint("不为空")if['a']isnotFalse:#等价于上面print("不为空")if[]:#不能写isprint("不为空")else:prin......
  • MySQL安装
    1、检查是否已经安装了mysql和mariadbrpm-qa|grepmysqlrpm-qa|grepmariadb#如果已经安装,就先卸载:rpm-e--nodeps软件名2、安装mysql按顺序安装:8.0.28-1.el7版本rpm-ivhmysql-community-common-8.0.28-1.el7.aarch64.rpmrpm-ivhmysql-community-cli......
  • python 函数基本使用(笔记整理)
    一、函数的概念1.什么是函数函数代表功能,也称“方法”,它是对数据与功能代码进行封装,实现了功能代码的复用简单来说:函数就是把你要写的代码固定成一块,需要使用这个功能的时候直接调用即可2.函数的分类python函数有四类,分别是:内置函数(builtinfunctions),标准库函数,第三方......
  • 【转载】Sqlserver存储过程中使用Select和Set给变量赋值
    @@sqlserverselect赋值  Sqlserver存储过程是时常使用到的一个数据库对象,在存储过程中会使用到Declare来定义存储过程变量,定义的存储过程变量可以通过Set或者Select等关键字方法来进行赋值操作,使用Set对存储过程变量赋值为直接赋值,使用Select则一般从数据表中查找出符合条......
  • 【转】SQL SERVER 游标
    @@SQLserver游标  游标(Cursor)是SQL Server的一种数据访问机制,它使得程序可以逐行处理数据,即允许用户访问单独的数据行,对每一行数据进行单独的处理。一,创建游标对象创建游标对象,注意不是游标变量,游标名称不需要带前导@:DECLAREcursor_nameCURSOR[LOCAL|GLO......
  • SqlServer中使用Select语句给变量赋值的时候需要注意的一个问题
    @@sqlserverselect赋值  我们知道在SqlServer中可以用Select语句给变量赋值,比如如下语句就为int类型的变量@id赋值1declare@idint=-1;23select@id=idfrom4(5select1asid6unionall7select2asid8unionall9select3asid10)a......
  • MySQL-DQL
    准备测试表,先跟着执行下面的SQL#1.登录MySQL后#2.创建test_database数据库,不存在则创建createdatabaseifnotexiststest_database;#2.1.如果test_database库存在,可以根据自己意愿删除或换个名称dropdatabasetest_database;#删除test_database数据库#3.进入刚创建的库......
  • SqlServer select 赋值问题
    @@sqlserverselect赋值 --变量赋值正确,单个数据默认为变量declare@s1varchar(20)set@s1=(selectMAX(parked_id)fromparked)--变量赋值错误,多个数据默认为数据集declare@s2varchar(20)set@s2=(selectparked_idfromparked)————————————————版权......
  • Mysql数据库遇到的问题及解决办法
    1、1205-Lockwaittimeoutexceeded;tryrestartingtransaction该异常代表数据库中有进程锁住了,会导致后续对数据库的操作都无法执行,需要杀掉锁住的进程 解决办法:1)、SELECT*FROMinformation_schema.INNODB_TRX;执行后找到名为trx_mysql_thread_id的列。2)、杀掉列中的......
  • MySQL学习进阶篇Day1
    1.存储引擎1.1MySQL体系结构  1).连接层最上层是一些客户端和链接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提......