python 鏈接和操作 sqlite 與 xlsxwriter 生成 Excel 文件
你好,我是悅創(chuàng)。新年過后我將繼續(xù)持續(xù)更新辦公自動(dòng)化系列教程。本文涉及代碼或資料獲取方式:
1、關(guān)注公眾號:AI悅創(chuàng)
2、后臺回復(fù):20210220
鏈接和查詢代碼
Python 自身攜帶 sqlite 庫,不需要額外安裝,直接使用即可。導(dǎo)入代碼:
import sqlite3
導(dǎo)入代碼之后,將 first.db 文件,放到代碼文件旁邊。這里用的是 ipynb ,所以是把 ipynb 和 first.db 文件放一起,不放一起就只能使用絕對路徑。如下圖:
然后使用 sqlite3 庫,鏈接 first.db ?文件,代碼 ?firstdb = sqlite3.connect('first.db')正常運(yùn)行后,寫查詢語句,從數(shù)據(jù)庫中讀取全部數(shù)據(jù),如下代碼:
# 查詢語句
query_sql = "select * from info"
for result in firstdb.execute(query_sql):
print(result)
輸出結(jié)構(gòu)效果圖:
這是最簡單的查詢語句。數(shù)據(jù)庫都是支持查詢、刪除、增加、更新操作的。
刪除數(shù)據(jù)操作
刪除操作,將數(shù)據(jù)從數(shù)據(jù)庫中移除,關(guān)鍵詞 delete ,先刪除一條數(shù)據(jù),如下代碼:
# 刪除特定數(shù)據(jù)
delete_sql = "delete from info where id = 1 "
firstdb.execute(delete_sql)
firstdb.commit()
# 查詢并輸出
query_sql = "select * from info"
for result in firstdb.execute(query_sql):
print(result)
運(yùn)行結(jié)果如下圖:
插入更多數(shù)據(jù)
增加的操作,關(guān)鍵詞 add ,使用 for 循環(huán),先批量的增加一些數(shù)據(jù)
# 插入數(shù)據(jù)
insert_sql = "insert into info(title, content, author) values ('第{}個(gè)標(biāo)題', '隨機(jī)的第{}個(gè)內(nèi)容', '匿名')"
for i in range(10,20):
sql = insert_sql.format(i,i*2)
firstdb.execute(sql)
firstdb.commit()
# 查詢并輸出
query_sql = "select * from info"
for result in firstdb.execute(query_sql):
print(result)
for 循環(huán),從 10 循環(huán)到 20,不含 20,然后全部執(zhí)行 sql 語句和提交到數(shù)據(jù)庫。最后查詢?nèi)繑?shù)據(jù),看下有沒有增多,如下結(jié)果圖:
更新數(shù)據(jù)操作
數(shù)據(jù)有增加,最后更新數(shù)據(jù),關(guān)鍵詞update,做個(gè)條件更新,id大于等于4的數(shù)據(jù),設(shè)置 author 為“不匿名”,如下代碼:
# 更新數(shù)據(jù)
update_sql = "update info set author = '不匿名' where id >= 4"
firstdb.execute(update_sql)
# 查詢并輸出
query_sql = "select * from info"
for result in firstdb.execute(query_sql):
print(result)
最后的結(jié)果圖如下:
以上就是 Python 操作 sqlite 的全部代碼了。
【多選題】小練習(xí)
數(shù)據(jù)庫支持哪些操作?
[ ] 更新數(shù)據(jù) [ ] 新增數(shù)據(jù) [ ] 查詢數(shù)據(jù) [ ] 刪除數(shù)據(jù)
xlsxwriter 生成 Excel 文件
為什么需要掌握新的庫
操作 xls
xlrd 和 xlwt,以及 xlutils 足以滿足對 xls 文件的讀、寫、追加功能。但是辦公文件的格式,不是 xls,還有 xlsx,還有我們很少見的 xlsm 等。
操作 xlsx
xlsx 是 xls 的升級版,xls 是老版本的辦公軟件所支持的文件格式,且劣勢也比較明顯,當(dāng)文件數(shù)據(jù)超過65536 行和 256 列,使用 xls 則會導(dǎo)致數(shù)據(jù)截?cái)唷?/p>
xlsx 的支持則更好,同樣多的數(shù)據(jù),xlsx 格式的文件體積小,支持的操作更多,軟件打開和動(dòng)作執(zhí)行的速度會更快。
本次介紹的庫是 xlsxwriter 和 openpyxl ,這兩個(gè)庫均支持操作 xlsx 文件格式。掌握 xlsx 的讀寫操作,也是大勢所趨。
寫入頭部標(biāo)題
首先是學(xué)習(xí) xlsxwriter 庫,安裝命令:pip install xlsxwriter。
第一步先導(dǎo)入庫,以及打開一個(gè) xlsx 文件:
import xlsxwriter, random
wb = xlsxwriter.Workbook('xlsxwriter插入數(shù)據(jù).xlsx')
xlsx 和 xls 的操作都是一致的,單個(gè)文件,里面可以添加多個(gè) sheet。打開文件后,需要新建第一個(gè) sheet。
worksheet1 = wb.add_worksheet('代碼操作記錄')
有了 sheet,開始準(zhǔn)備標(biāo)題和數(shù)據(jù)并寫入文件。首先是頭部標(biāo)題:
headings = ['日期','數(shù)據(jù)1','數(shù)據(jù)2']
worksheet1.write_row('A1',headings)
標(biāo)題保存在 headings 中,列表格式,然后逐個(gè)寫入到 sheet 中。
但是這里的寫入操作,不是行數(shù) 列數(shù) 數(shù)據(jù)格式的單個(gè)數(shù)據(jù)寫入操作,而是直接寫入一行或者一列。這里用的是寫入 wtier_row,寫入一行,從 A1 開始,然后 A2 A3,一直往后寫。
寫入數(shù)據(jù)內(nèi)容
接下來寫入數(shù)據(jù),首先是創(chuàng)造數(shù)據(jù),結(jié)構(gòu)也是列表格式,然后使用寫入列的操作,將數(shù)據(jù)整行的寫入。
data = [
['2019-1','2019-2','2019-3','2019-4','2019-5','2019-6','2019-7','2019-8','2019-9','2019-10','2019-11','2019-12',],
[random.randint(1,100) for i in range(12)],
[random.randint(1,100) for i in range(12)],
]
worksheet1.write_column('A2',data[0])
worksheet1.write_column('B2',data[1])
worksheet1.write_column('C2',data[2])
這里的數(shù)據(jù)使用了 random 庫隨機(jī)設(shè)置,所以第一塊代碼中,有 random 的導(dǎo)入。
data 是列表,里面有三個(gè)列表,分別是日期和兩類數(shù)據(jù),結(jié)合頭部標(biāo)題,寫入的數(shù)據(jù),是三列,所以用的是write_column 函數(shù)。
寫完之后,直接關(guān)閉即可。
wb.close()
用 Office 打開文件,如下圖:
數(shù)據(jù)寫入完畢。
新建圖表對象
數(shù)據(jù)寫好了,但是 Excel 不僅僅只是存放數(shù)據(jù)的,也可以生成圖表。下面我們就學(xué)習(xí)下如何生成圖表。
圖表的數(shù)據(jù),直接使用數(shù)據(jù) 1 和數(shù)據(jù) 2 的內(nèi)容,并且前半部分,數(shù)據(jù)的寫入就是上面的代碼。
數(shù)據(jù)寫入之后,不關(guān)閉,然后繼續(xù)操作,生成一個(gè)圖表信息。
第一部分,折線圖表的定義:
chart_col = workbook.add_chart({'type':'line'})
有了圖表對象,下面就是往里加入數(shù)據(jù)。
圖表數(shù)據(jù)配置
這里的數(shù)據(jù)有兩條,一個(gè)是數(shù)據(jù)1,一個(gè)是數(shù)據(jù)2,所以圖表添加數(shù)據(jù)的代碼如下:
chart_col.add_series(
{
'name':'=sheet1!$B$1',
'categories':'=sheet1!$A$2:$A$7',
'values': '=sheet1!$B$2:$B$7',
'line': {'color': 'blue'},
}
)
chart_col.add_series(
{
'name':'=sheet1!$C$1',
'categories':'=sheet1!$A$2:$A$7',
'values': '=sheet1!$C$2:$C$7',
'line': {'color': 'green'},
}
)
有兩條數(shù)據(jù),所以添加了兩次。
數(shù)據(jù)有四項(xiàng),數(shù)據(jù)名、具體值對應(yīng)的橫坐標(biāo) categories、具體值對應(yīng)的縱坐標(biāo) values、折線顏色,其中取值方式,直接是使用 sheet 的坐標(biāo)形式,例如 name 是 B1 和 B2,categories 都是 A2-A7,值分別是 B2-B7 和 C2-C7。
完成圖表
數(shù)據(jù)添加之后,在設(shè)置下坐標(biāo)的相關(guān)信息,就是標(biāo)題、x 軸、y 軸的名字,以及圖表位置和大小,代碼如下:
chart_col.set_title({'name':'虛假數(shù)據(jù)折線圖'})
chart_col.set_x_axis({'name':"橫坐標(biāo)"})
chart_col.set_y_axis({'name':'縱坐標(biāo)'}) #設(shè)置圖表表頭及坐標(biāo)軸
worksheet.insert_chart('D2',chart_col,{'x_offset':25,'y_offset':10}) #放置圖表位置
wb.close()
圖表的位置和大小,是根據(jù)左上角的起始表格和 x 和 y 的偏移計(jì)算的。
代碼中是從 D2 做左上角起始,然后 x 和 y ?分別便宜 25 和 10 個(gè)單位,得到了圖片的最終大小。最后關(guān)閉 ?wb。
下面是最后的 ?Excel 文件樣式:
以上就是 xlsxwriter ?的使用示例,有圖的加入,比較有趣。但是 xlsxwriter ?只能創(chuàng)建新的文件,不能追加和讀取。
長按識別下方二維碼,和眾多位島民一起
把別人的頓悟,變成你的基本功
?花半秒鐘就看透事物本質(zhì)的人,
? 和花一輩子都看不清的人,
? 注定是截然不同的命運(yùn)。



