Python实现数据转移:SQL server ==> SQL server

发布时间:2024-11-24 07:01

SQL数据库管理:MySQL或SQL Server的基本操作 #生活技巧# #工作学习技巧# #编程语言学习路径#

最新推荐文章于 2024-10-09 17:12:23 发布

郎家岭伯爵 于 2020-10-07 10:32:56 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

背景

实际运用过程中需要把数据库A中的数据转移到数据库B(均为SQL server数据库),本例使用Python来实现。文中两个.py文件中涉及的数据库连接信息以及SQL语句均以自己的实际需求为准

实现

代码块1(把数据从数据库A中拿出来)

import pymssql #数据库服务器信息 server="数据库A服务器" user="账号" password="密码" database="数据库" conn=pymssql.connect(server,user,password,database) cur = conn.cursor() sql = """select * from table""" cur.execute(sql) rows_SCCM = cur.fetchall() cur.close() conn.close()

12345678910111213141516 代码块2(把代码块1中的查询的数据存入代码2中)

注:

插入新数据中时,SQL语句要明确指出列名,否则可能会出现莫名的错误。本例中这个语句最好是在VALUES后指明列名。 INSERT INTO [SCCM].[dbo].[SCCM_FOR_ASSETS] VALUES(指明列名) ('%s','%s','%s','%s','%s','%s','%s','%s')""" % (var1,var2,var3,var4,var5,var6,var7,var8)None替换为NULL值似乎不必要,可直接将None插入数据库,后续直接替换None为空值即可。此思路不确定完全正确。
if var1 == None: var1 = 'NULL'

import pymssql from SQLserver_Assets import rows_SCCM #引入代码块1中抓取出来的数据 from datetime import datetime,timedelta import time #数据库服务器信息 server="数据库B服务器" user="账号(此处的账号应有足够的权限,因为此处涉及到删除数据以及插入数据)" password="密码" database="数据库" conn=pymssql.connect(server,user,password,database) #获取系统时间,用以记录程序运行的日期信息 date = datetime.today() + timedelta() date1 = date.strftime("%Y%m%d") #删除旧数据并插入新数据 cur = conn.cursor() sql1 = """delete from [SCCM].[dbo].[SCCM_FOR_ASSETS]""" cur.execute(sql1) #删除旧数据 conn.commit() i = 0 while (i<len(rows_SCCM[i])): var1 = rows_SCCM[i][0] if var1 == None: var1 = 'NULL' #此判断均用于解决python中的None在SQL中无法保存的问题,SQL中空值为NULL。注意此处的NULL实际为字符串,并不是真正的空值。后续会有代码部分对此部分进行处理。 var2 = rows_SCCM[i][1] if var2 == None: var2 = 'NULL' var3 = rows_SCCM[i][2] if var3 == None: var3 = 'NULL' var4 = rows_SCCM[i][3] if var4 == None: var4 = 'NULL' var5 = rows_SCCM[i][4] if var5 == None: var5 = 'NULL' var6 = rows_SCCM[i][5] if var6 == None: var6 = 'NULL' var7 = rows_SCCM[i][6] if var7 == None: var7 = 'NULL' var8 = date1 sql = """INSERT INTO [SCCM].[dbo].[SCCM_FOR_ASSETS] VALUES ('%s','%s','%s','%s','%s','%s','%s','%s')""" % (var1,var2,var3,var4,var5,var6,var7,var8) try: cur.execute(sql) #插入新数据 conn.commit() print(i) except: pass #对插入失败的行进行二次插入,减少插入失败的部分。 i += 1 sql2 = """UPDATE [SCCM].[dbo].[SCCM_FOR_ASSETS] SET [USERNAME] = NULL WHERE [USERNAME] = 'NULL'""" cur.execute(sql2) #此处为把SQL中NULL字符串UPDATE为真正的空值。 conn.commit() cur.close() conn.close()

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162

个人能力有限,如有谬误欢迎指正!

网址:Python实现数据转移:SQL server ==> SQL server https://www.yuejiaxmz.com/news/view/229557

相关内容

SQL Server大表如何快速删除数据
SQL Server数据库性能优化(一)之 优化SQL 语句
SQL Server 2005基础与提升实训视频教程【共25课时】
PowerBuilder连接SQLServer失败 SQL State:‘28000’
Internal Server Error
[黑客技术]SQL注入的新技巧
windows cmd 执行sql文件ERROR 1064 (42000):You have an error in your SQL syn报语法错误解决办法
python可以不对变量初始化
MySQL 快速删除大量数据(千万级别)的几种实践方案——附源码
PyMySQL的使用:事务、索引、如何防止SQL注入

随便看看