SQL Server將數(shù)據(jù)導(dǎo)入導(dǎo)出到Excel表格的全過(guò)程
最開(kāi)始,博主介紹一下自己的環(huán)境:SQL Sever 2008 R2
SQL Sever 大致都差不多
1. 通過(guò)自帶軟件的方式
首先找到下載SQL Sever中提供的導(dǎo)入導(dǎo)出工具
如果開(kāi)始界面沒(méi)有找到自己下載的路徑
C:\Program Files\Microsoft SQL Server\100\DTS\Binn下的DTSWizard.exe文件
導(dǎo)出
1.1 打開(kāi)界面
1.2 選擇自己的數(shù)據(jù)源和數(shù)據(jù)庫(kù)
1.3 選擇導(dǎo)出目標(biāo)
這里博主導(dǎo)出到Excel文件當(dāng)中
1.4 選擇直接導(dǎo)出數(shù)據(jù)還是進(jìn)行查詢
查詢的話將自己在SSMS上編寫的SQL語(yǔ)句直接復(fù)制到框中即可(確保SQL正確,可以進(jìn)行測(cè)試!)
這里博主直接導(dǎo)出表中數(shù)據(jù)
1.5 選擇表目標(biāo)
這里需要切記表的分隔符為:
行:{CR}{LF}
列:制表符
格式不對(duì),可能導(dǎo)出的結(jié)構(gòu)出錯(cuò)
(也就是不按照行列的方式導(dǎo)入到Excel當(dāng)中!)
1.6 完成導(dǎo)出
1.7 檢查是否導(dǎo)出成功
可以看到Excel表格中出現(xiàn)新數(shù)據(jù)!
導(dǎo)入
1.1 打開(kāi)界面
1.2 選擇數(shù)據(jù)源
這里博主選擇的是Excel表格
這里的標(biāo)題分隔符選{CR}{LF}
這里博主前面有6行垃圾數(shù)據(jù)(所以選擇跳過(guò)6行)
行分隔符{CR}{LF}
列分隔符制表符
1.3 選擇導(dǎo)入目標(biāo)數(shù)據(jù)庫(kù)
選擇自己的服務(wù)器和數(shù)據(jù)庫(kù)
1.4 選擇表
導(dǎo)入的目標(biāo)表
1.5 選擇數(shù)據(jù)類型映射
1.6 完成導(dǎo)入
1.7 檢查是否導(dǎo)入成功
選擇SSMS工具
打開(kāi)對(duì)應(yīng)的表和數(shù)據(jù)行
查看數(shù)據(jù),可以看到數(shù)據(jù)導(dǎo)入成功!
1. SQL Sever 2008 R2 存在的問(wèn)題:
這是SQLSever2008R2所獨(dú)有的,其他版本不清楚,自行了解!
對(duì)于還未和SQL Sever數(shù)據(jù)庫(kù)建立過(guò)鏈接的新建Excel表格無(wú)法導(dǎo)入導(dǎo)出數(shù)據(jù)!
所以咱們需要先讓Excel表格和數(shù)據(jù)庫(kù)建立連接
1.1 隨便找個(gè)表查看表中數(shù)據(jù)
1.2 選擇將結(jié)果保存到文件
右鍵SQL語(yǔ)句框出現(xiàn)如下界面
1.3 右鍵選擇執(zhí)行
1.4 保存結(jié)果
1.5 查看文件
可以看到Excel文件中出現(xiàn)了數(shù)據(jù),但是這些數(shù)據(jù)無(wú)法分析(無(wú)效數(shù)據(jù)),將這些數(shù)據(jù)刪除就可以正常進(jìn)行導(dǎo)入導(dǎo)出。
2. 通過(guò)Pycharm(ODBC)的方式
代碼如下所示:
import pyodbc import pandas as pd # 創(chuàng)建連接字符串 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) # 創(chuàng)建游標(biāo)對(duì)象 cursor = cnxn.cursor() # 執(zhí)行SQL查詢 query = "SELECT * FROM dbo.salgrade" cursor.execute(query) # 獲取查詢結(jié)果 data1 = cursor.fetchall() print(type(data1)) print(data1) # 獲取列名 columns1 = [column[0] for column in cursor.description] print(type(columns1)) print(columns1) # 將元組列表展開(kāi)為一維數(shù)組 data1 = [list(item) for item in data1] print(type(data1)) print(data1) # 將結(jié)果轉(zhuǎn)換為DataFrame df1 = pd.DataFrame(data1, columns=columns1) print(df1) # 將數(shù)據(jù)寫入Excel文件 df1.to_excel('output.xlsx', index=False) # 關(guān)閉數(shù)據(jù)庫(kù)連接 cursor.close() cnxn.close()
關(guān)鍵點(diǎn)1:連接方式
數(shù)據(jù)庫(kù)是:SQL Sever 2008 R2 所以這里采用的連接方式是SQL Sever Native Client 10.0 如果是更新的版本應(yīng)該是16或者其他
(可以問(wèn)問(wèn)ChartGPT)
# 創(chuàng)建連接字符串 conn_str = ( r'DRIVER={SQL Server Native Client 10.0};' r'SERVER=BF-202403241716;' r'DATABASE=scott;' r'Trusted_Connection=Yes;' )
具體的服務(wù)器和數(shù)據(jù)庫(kù)按照自己的來(lái),這里我SQL Sever通過(guò)驗(yàn)證的方式是Windows驗(yàn)證,所以這里r'Trusted_Connection=Yes;'
如果有用戶密碼,請(qǐng)使用用戶密碼的方式登錄。
關(guān)鍵點(diǎn)2:元組列表需要轉(zhuǎn)換為一維數(shù)組(???)
# 將元組列表展開(kāi)為一維數(shù)組 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
需要將元組列表展開(kāi)為一維數(shù)組
原因:data1 是一個(gè)包含元組的列表,每個(gè)元組都是一個(gè)行,但是傳遞給DataFrame的每行數(shù)據(jù)應(yīng)該是一維的,如果不進(jìn)行轉(zhuǎn)換,那么傳遞的數(shù)據(jù)就是二維的
會(huì)出現(xiàn)如下類型不匹配的報(bào)錯(cuò)==(解決了半天,還是有點(diǎn)不理解)==
import pyodbc import pandas as pd # 假設(shè)data是cursor.fetchall()返回的結(jié)果,它是一個(gè)包含元組的列表 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) # 將結(jié)果轉(zhuǎn)換為DataFrame df = pd.DataFrame(list(data), columns=columns) print(df)
code2當(dāng)中代碼如上,同樣還是一個(gè)包含元組的列表,但是就是可以轉(zhuǎn)換成DataFrame的形式==(很奇怪啊)==
關(guān)鍵點(diǎn)3:import導(dǎo)包
如果直接從官網(wǎng)進(jìn)行下載的話,速度可能會(huì)很慢,而且有時(shí)候還會(huì)斷開(kāi)連接,所以可以選擇一些國(guó)內(nèi)的鏡像網(wǎng)站
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
成功結(jié)果如下:
以上就是SQL Server將數(shù)據(jù)導(dǎo)入導(dǎo)出到Excel表格的全過(guò)程的詳細(xì)內(nèi)容,更多關(guān)于SQL Server數(shù)據(jù)導(dǎo)入導(dǎo)出到Excel的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SQL Server 公用表表達(dá)式(CTE)實(shí)現(xiàn)遞歸的方法
這篇文章主要介紹了SQL Server 公用表表達(dá)式(CTE)實(shí)現(xiàn)遞歸的方法,需要的朋友可以參考下2017-05-05關(guān)于SQL Server數(shù)據(jù)庫(kù)中的用戶權(quán)限和角色管理功能實(shí)現(xiàn)
在本文中,我們介紹了在SQL Server中創(chuàng)建用戶、分配權(quán)限和管理角色的基礎(chǔ)知識(shí),請(qǐng)記住定期審查和更新用戶權(quán)限,以符合您組織的安全政策和數(shù)據(jù)訪問(wèn)要求,這篇文章主要介紹了關(guān)于SQL Server數(shù)據(jù)庫(kù)中的用戶權(quán)限和角色管理,需要的朋友可以參考下2024-03-03如何得到數(shù)據(jù)庫(kù)中所有表名 表字段及字段中文描述
最近做一個(gè)項(xiàng)目,客戶希望可以自己選擇想要查看的列表,這樣就不好辦了,選擇列表的名字他們也想自定義,沒(méi)辦法這就需要查看數(shù)據(jù)表中字段,中文說(shuō)明,默認(rèn)標(biāo)志了2011-12-12深入SQLServer中ISNULL與NULLIF的使用詳解
本篇文章是對(duì)SQLServer中ISNULL與NULLIF的使用進(jìn)行了詳細(xì)分析介紹,需要的朋友參考下2013-06-06MsSQL數(shù)據(jù)導(dǎo)入到Mongo的默認(rèn)編碼問(wèn)題(正確導(dǎo)入Mongo的方法)
今天進(jìn)行了一個(gè)實(shí)驗(yàn)來(lái)驗(yàn)證數(shù)據(jù)導(dǎo)入到mongo的效率問(wèn)題,但是期間出現(xiàn)了默認(rèn)編碼問(wèn)題,下面看一下正確的方法2013-11-11