日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

方便且實用,Python內置的輕量級數據庫實操

 

之前我們在很多項目案例中都使用了MySQL數據庫。有的同學問:MySQL安裝和配置太麻煩了,老是搞不定,有沒有更簡便的方法?

當然有咯!

Python內置的sqlite3模塊就是一個輕量級的數據庫,不需要獨立的服務器進程。它的數據庫就是一個.db后綴的文件,可以跨平臺直接訪問,非常便捷。簡直就是輕量級數據的首選數據庫啊!

今天我們就來用Python實戰(zhàn)操作一下sqlite3,通過本案例可以完全掌握sqlite3的常用操作。

本文主要內容:

  • 數據讀取和插入:包括原始數據的讀取、插入數據庫。
  • 數據庫操作:包括數據的查詢、刪除、導出等操作,最后上一個自動化導出的案例。

不過,在開始前需要說明的是,雖然Python內置了sqlite3模塊,但它只是用來連接數據庫的接口。你仍然需要確保電腦上已經有了sqlite3這個數據庫軟件。

如果你是mac或者linux系統(tǒng),那么恭喜你,你的電腦上默認就裝有sqlite3。windows的同學得手動安裝一下。

下載地址:https://www.sqlite.org/download.html

選擇 Precompiled Binaries for Windows,下載預編譯的二進制 zip 文件:sqlite-tools-win32-*.zip 和 sqlite-dll-win32-*.zip。

在你的電腦上創(chuàng)建文件夾 C:sqlite,并在此文件夾下解壓上面兩個壓縮文件,將得到 sqlite3.def、sqlite3.dll 和 sqlite3.exe 文件。

添加 C:sqlite 到 PATH 環(huán)境變量。安裝成功后,在命令提示符下,使用 sqlite3 命令,將會顯示如下結果:

C:>sqlite3
SQLite version 3.7.15.2 2013-01-09 11:53:05
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>

1. 讀取數據并插入數據庫

本文以TXT文件為例,進行示范操作。TXT文件為單列數據,以換行符分割,文件數量60+,數據總量5萬+。

程序設計思路:自動讀取每個TXT文件,再依次讀取每一行并插入數據庫中。

1.1 源代碼

# -*- coding: utf-8 -*-
"""
Created on Fri Jan 17 15:06:42 2020

@author: liulu
"""
import sqlite3
import os
path = os.getcwd()
files = os.listdir(path)
conn = sqlite3.connect(path+'db.db')
cur = conn.cursor()
cur.execute('create table if not exists numbers (id integer primary key ,number varchar(20) NOT NULL)')
conn.commit()
i = 0
for file in files:
    if file.split('.')[-1] == 'txt':
        with open(file,'r',encoding = 'UTF-8') as f:
            next(f)
            for line in f:
                i += 1
                print("插入第", i, "條數據:")
                #print(line)
                cur.execute('insert into numbers values(?,?)',(i,line))
                conn.commit()
cur.close()
conn.close()
print('數據寫入完成!共寫入',i,' 條數據')

1.2 運行效果

方便且實用,Python內置的輕量級數據庫實操

 

代碼運行效果圖

1.3 重點代碼解釋

1)自動獲取所有TXT文件名稱和路徑

了解我的讀者都知道,我是比較懶的,我不喜歡指定程序的路徑。我寫的程序都是自己找路徑,自己找文件名稱。感興趣的朋友可以去我的公眾號(智能演示)查看這篇文章:獲取任意路徑下文件名稱的2種方法。

2)數據庫的創(chuàng)建與連接

conn = sqlite3.connect(path+'db.db')

path是程序所在路徑,也是TXT文件的所在路徑。這行代碼的意思是:如果數據庫已經存在,則連接數據庫;如果數據庫不存在,則先創(chuàng)建數據庫,再連接該數據庫。

3)創(chuàng)建表

cur.execute('create table if not exists numbers (id integer primary key ,number varchar(20) NOT NULL)')

在數據庫db.db 中創(chuàng)建表numbers,表中包含兩個字段:id、number。

注意!一定不要忘了conn.commit()保存一下!不然后面的數據是插不進去的。

4)插入數據

①優(yōu)化打開方式

with open(file,'r',encoding = 'UTF-8') as f:

建議使用 with 語句來打開TXT文件。這樣做的好處是,當對象會在with語句結束時會自動關閉。效率更高!不易出錯。

②占位符功能

cur.execute('insert into numbers values(?,?)',(i,line))

(?,?) 起到占位符功能,(i,line))中的值會按位置替換到SQL語句中。

這樣就實現了數據的自動插入數據庫。需要幾分鐘時間,請耐心等待。

方便且實用,Python內置的輕量級數據庫實操

 

我們查看下db.db文件屬性,可以看到存儲了51216條數據的數據庫文件大小只有1.13MB,可以說是很輕量的。

方便且實用,Python內置的輕量級數據庫實操

 

你可以將這個數據庫文件復制到任意一臺電腦上,連接上數據庫即可進行操作,非常方便。

 

下面就來說一下sqlite3的常用操作。

2. 數據庫操作

2.1 連接數據庫

import sqlite3
import os
path = os.getcwd()
files = os.listdir(path)
conn = sqlite3.connect(path+'db.db')
cur = conn.cursor()

這樣就連接上了剛才的數據庫。path+'db.db'是數據庫的路徑及文件名,你可以手動輸入路徑,也可以將.py文件和db.db數據庫文件放在同一目錄下,系統(tǒng)自動計算路徑,這是懶人方法。

2.2 查詢數據庫中有哪些表

我們似乎不知道db.db這個數據庫中有什么,如何才能知道這個數據庫中有哪些表呢?

cur.execute("SELECT name FROM sqlite_master WHERE type='table';")
Tables=cur.fetchall()
print(Tables)
# [('numbers',)]

2.3 刪除數據庫中的某個表

如果需要刪除數據庫中的某個表,可以執(zhí)行以下命令:

cur.execute("drop table tablename;")

2.4 查詢某個表的結構

cur.execute("PRAGMA table_info(numbers)")
print(cur.fetchall())
# [(0, 'id', 'integer', 0, None, 1), (1, 'number', 'varchar(20)', 1, None, 0)]

2.5 查詢表中前50條記錄

cur.execute("SELECT * from numbers limit 0,50;")
conn.commit
data = cur.fetchall()
print(data)

2.6 查詢表中所有記錄

# 5.查詢表中所有記錄
cur.execute("SELECT * from numbers;")
data_all = cur.fetchall()
a = len(data_all)
print('共有 '+ str(a) + ' 條記錄')
#print(data)

2.7 查詢表中不重復記錄

cur.execute("SELECT distinct number from numbers;")
data_distinct = cur.fetchall()
b = len(data_distinct)
print('共有 '+ str(b) +' 條不重復記錄')
#print(data_distinct)

2.8 將老表中的不重復記錄插入新表

# 創(chuàng)建一個新表
cur.execute('create table if not exists numbers_distinct (id integer primary key ,number varchar(20) NOT NULL)')
conn.commit()
# 插入數據
i = 0
for data in data_distinct:
    i += 1
    data = data[0]
    #print(data)
    cur.execute('insert into numbers_distinct values(?,?)',(i,data))
    conn.commit()

2.9 將特定結果寫入文本文件(單列)

cur.execute("SELECT number from numbers_distinct limit 0,10;")
datas = cur.fetchall()
#print(datas)
with open('datafile1.txt','w') as f1:
    for data in datas:
        f1.write(data[0])
        f1.flush()

注意:f1.flush()操作很重要!將緩沖區(qū)的數據寫入文件中,否則文本文件為空白,導致寫入失敗。

2.10 將特定結果寫入文本文件(多列)

cur.execute("SELECT * from numbers_distinct limit 0,10;")
datas = cur.fetchall()
#print(datas)
with open('datafile2.txt','w') as f2:
    for data in datas:
        data0 = str(data[0]) # 將int類型轉為str,否則write函數報錯
        data = data0 + '    ' + data[1] # 在兩列之間以Tab鍵分隔
        f2.write(data)
        f2.flush()

2.11 將特定結果寫入CSV文件(多列)

寫入CSV文件和寫入文本文件的方法基本相同,只需要將文件后綴改為 '.csv',并將分隔符改為英文狀態(tài)下逗號即可。

with open('datafile3.csv','w') as f3:
    for data in datas:
        data0 = str(data[0]) # 將int類型轉為str,否則write函數報錯
        data = data0 + ',' + data[1] # 在兩列之間以逗號鍵分隔
        f3.write(data) # data是元組類型
        f3.flush() # 重要!將緩沖區(qū)的數據寫入文件中

2.12 辦公自動化案例

本文以:將number_distingct表中的數據,以每50個為一組,分別存入一個文本文件為例,演示以下Python結合sqlite3數據庫的辦公自動化的驚艷效果。

1)源代碼

"""
源代碼已發(fā)布到【智能演示】微信公眾號,后臺回復 sqlite3 可獲取下載鏈接。
"""
for n in range(int(b/50)+1):
    if 50*n+50 < b: # b為數據記錄總數
        cur.execute('SELECT number from numbers_distinct limit ?,?',(50*n,50))
        datas = cur.fetchall()
        #print(datas)
        filename = str(50*n) + '-' + str(50*n+50) + '.txt'
        print('正在寫入:' + filename)
        with open(filename,'w') as f4:
            for data in datas:
                f4.write(data[0]) # data是元組類型
                f4.flush() # 重要!將緩沖區(qū)的數據寫入文件中
    else:
        filename = str(50*n) + '-' + str(b) + '.txt'
        print('正在寫入:' + filename)
        with open(filename,'w') as f5: # 計算最后一個文本文件名稱
            cur.execute('SELECT number from numbers_distinct limit ?,?',(50*n+50,50))
            datas = cur.fetchall()
            for data in datas:
                f5.write(data[0]) # data是元組類型
                f5.flush() # 重要!將緩沖區(qū)的數據寫入文件中
print('寫入完成!共寫入{}個TXT文件。'.format(n+1))

2)運行效果

方便且實用,Python內置的輕量級數據庫實操

 

導出719個TXT文件,幾秒鐘就完成了。

3)重點代碼解釋

這個案例的重點是如何計算出每個TXT文件的名稱。

我們可以計算出numbers_distinct表中共有35926條數據。

我們可以構建這樣一個函數:filename = str(50*n) + '-' + str(50*n+50) + '.txt',用來計算每個導出的TXT文件名稱。

但是最后一個文件的名稱不能通過這個方法來構建,需要作以下簡單的修改:filename = str(50*n) + '-' + str(b) + '.txt'

計算好每個TXT文件名稱后,直接用write函數寫入就可以了。

快來動動手試一下吧!

分享到:
標簽:數據庫 Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰(zhàn)2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定