最开始,博主介绍一下自己的环境:sql sever 2008 r2
sql sever 大致都差不多
1. 通过自带软件的方式
首先找到下载sql sever中提供的导入导出工具


如果开始界面没有找到自己下载的路径
c:\program files\microsoft sql server\100\dts\binn下的dtswizard.exe文件

导出
1.1 打开界面

1.2 选择自己的数据源和数据库

1.3 选择导出目标
这里博主导出到excel文件当中

1.4 选择直接导出数据还是进行查询

查询的话将自己在ssms上编写的sql语句直接复制到框中即可(确保sql正确,可以进行测试!)
这里博主直接导出表中数据
1.5 选择表目标

这里需要切记表的分隔符为:
行:{cr}{lf}
列:制表符
格式不对,可能导出的结构出错
(也就是不按照行列的方式导入到excel当中!)
1.6 完成导出



1.7 检查是否导出成功

可以看到excel表格中出现新数据!
导入
1.1 打开界面

1.2 选择数据源
这里博主选择的是excel表格
这里的标题分隔符选{cr}{lf}
这里博主前面有6行垃圾数据(所以选择跳过6行)

行分隔符{cr}{lf}
列分隔符制表符

1.3 选择导入目标数据库
选择自己的服务器和数据库

1.4 选择表
导入的目标表

1.5 选择数据类型映射

1.6 完成导入



1.7 检查是否导入成功
选择ssms工具

打开对应的表和数据行

查看数据,可以看到数据导入成功!

1. sql sever 2008 r2 存在的问题:
这是sqlsever2008r2所独有的,其他版本不清楚,自行了解!
对于还未和sql sever数据库建立过链接的新建excel表格无法导入导出数据!
所以咱们需要先让excel表格和数据库建立连接
1.1 随便找个表查看表中数据


1.2 选择将结果保存到文件
右键sql语句框出现如下界面

1.3 右键选择执行

1.4 保存结果

1.5 查看文件

可以看到excel文件中出现了数据,但是这些数据无法分析(无效数据),将这些数据删除就可以正常进行导入导出。
2. 通过pycharm(odbc)的方式
代码如下所示:
import pyodbc
import pandas as pd
# 创建连接字符串
conn_str = (
r'driver={sql server native client 10.0};'
r'server=bf-202403241716;'
r'database=scott;'
r'trusted_connection=yes;'
)
# 建立连接
cnxn = pyodbc.connect(conn_str)
# 创建游标对象
cursor = cnxn.cursor()
# 执行sql查询
query = "select * from dbo.salgrade"
cursor.execute(query)
# 获取查询结果
data1 = cursor.fetchall()
print(type(data1))
print(data1)
# 获取列名
columns1 = [column[0] for column in cursor.description]
print(type(columns1))
print(columns1)
# 将元组列表展开为一维数组
data1 = [list(item) for item in data1]
print(type(data1))
print(data1)
# 将结果转换为dataframe
df1 = pd.dataframe(data1, columns=columns1)
print(df1)
# 将数据写入excel文件
df1.to_excel('output.xlsx', index=false)
# 关闭数据库连接
cursor.close()
cnxn.close()
关键点1:连接方式
数据库是:sql sever 2008 r2 所以这里采用的连接方式是sql sever native client 10.0 如果是更新的版本应该是16或者其他
(可以问问chartgpt)
# 创建连接字符串
conn_str = (
r'driver={sql server native client 10.0};'
r'server=bf-202403241716;'
r'database=scott;'
r'trusted_connection=yes;'
)
具体的服务器和数据库按照自己的来,这里我sql sever通过验证的方式是windows验证,所以这里r'trusted_connection=yes;' 如果有用户密码,请使用用户密码的方式登录。
关键点2:元组列表需要转换为一维数组(???)
# 将元组列表展开为一维数组 data1 = [list(item) for item in data1] print(type(data1)) print(data1)
<class 'list'> [(1, 700, 1200), (2, 1201, 1400), (3, 1401, 2000), (4, 2001, 3000), (5, 3001, 9999)] <class 'list'> [[1, 700, 1200], [2, 1201, 1400], [3, 1401, 2000], [4, 2001, 3000], [5, 3001, 9999]] grade losal hisal 0 1 700 1200 1 2 1201 1400 2 3 1401 2000 3 4 2001 3000 4 5 3001 9999
需要将元组列表展开为一维数组
原因:data1 是一个包含元组的列表,每个元组都是一个行,但是传递给dataframe的每行数据应该是一维的,如果不进行转换,那么传递的数据就是二维的

会出现如下类型不匹配的报错==(解决了半天,还是有点不理解)==
import pyodbc import pandas as pd # 假设data是cursor.fetchall()返回的结果,它是一个包含元组的列表 data = [(1, 700, 1200), (2, 1201, 1400), (3, 1401, 2000), (4, 2001, 3000), (5, 3001, 9999)] print(type(data)) print(data) # 获取列名 columns = ['grade', 'losal', 'hisal'] # 确保这些列名与您的表中的列名相匹配 print(type(columns)) print(columns) # 将结果转换为dataframe df = pd.dataframe(list(data), columns=columns) print(df)

code2当中代码如上,同样还是一个包含元组的列表,但是就是可以转换成dataframe的形式==(很奇怪啊)==
关键点3:import导包
如果直接从官网进行下载的话,速度可能会很慢,而且有时候还会断开连接,所以可以选择一些国内的镜像网站
pip install some-package -i https://pypi.tuna.tsinghua.edu.cn/simple
以下这种方式就很慢:
(.venv) ps d:\code\test_3_29> pip install openpyxl collecting openpyxl downloading openpyxl-3.1.2-py2.py3-none-any.whl.metadata (2.5 kb) collecting et-xmlfile (from openpyxl) downloading et_xmlfile-1.1.0-py3-none-any.whl.metadata (1.8 kb) downloading openpyxl-3.1.2-py2.py3-none-any.whl (249 kb) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 250.0/250.0 kb 547.4 kb/s eta 0:00:00 downloading et_xmlfile-1.1.0-py3-none-any.whl (4.7 kb) installing collected packages: et-xmlfile, openpyxl successfully installed et-xmlfile-1.1.0 openpyxl-3.1.2
成功结果如下:


以上就是sql server将数据导入导出到excel表格的全过程的详细内容,更多关于sql server数据导入导出到excel的资料请关注代码网其它相关文章!
发表评论