欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python數(shù)據(jù)庫(kù)sqlite3圖文實(shí)例詳解

 更新時(shí)間:2022年09月18日 10:40:40   作者:練習(xí)時(shí)長(zhǎng)六年半的Programmer  
SQLite是一個(gè)進(jìn)程內(nèi)的庫(kù),實(shí)現(xiàn)了自給自足的、無服務(wù)器的、零配置的、事務(wù)性的SQL數(shù)據(jù)庫(kù)引擎,下面這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)庫(kù)sqlite3的相關(guān)資料,需要的朋友可以參考下

前言

提到數(shù)據(jù)庫(kù),大家第一時(shí)間想到的可能是 sql 數(shù)據(jù)庫(kù),這種數(shù)據(jù)庫(kù)非常好用,但是對(duì)于新手就不是很容易上手,需要熟悉一段時(shí)間才可以大概掌握。這種數(shù)據(jù)庫(kù)在大型的項(xiàng)目開發(fā)過程中用到的地方不會(huì)很多,但是一些普通的項(xiàng)目還是很實(shí)用的,大大減少了代碼量。

sqlite3數(shù)據(jù)庫(kù)

sqlite3 數(shù)據(jù)庫(kù)是 Python 自帶的數(shù)據(jù)庫(kù),甚至不需要額外安裝模塊,而且操作簡(jiǎn)單。

Python + Mysql = SQLite

但是這種數(shù)據(jù)庫(kù)在網(wǎng)上的教程很少,因?yàn)槲乙彩亲罱胖?,所以找了很長(zhǎng)時(shí)間的資料,

今天終于找齊了,來總結(jié)一下。真的找了好長(zhǎng)時(shí)間啊

1.需要的模塊(只有一個(gè))

import sqlite3

2.模塊的使用

首先打開我們的編譯器(推薦使用vscode,因?yàn)閿?shù)據(jù)庫(kù)文件后綴是 .db,vscode里顯示比較清楚)

2.1創(chuàng)建與數(shù)據(jù)庫(kù)的連接

先放上代碼

conn = sqlite3.connect('test.db')

使用 sqlite3 的 connect 函數(shù)可以創(chuàng)建數(shù)據(jù)庫(kù)或者連接數(shù)據(jù)庫(kù),

如果這個(gè)數(shù)據(jù)庫(kù)存在,就連接這個(gè)數(shù)據(jù)庫(kù),

如果這個(gè)庫(kù)不存在,就創(chuàng)建數(shù)據(jù)庫(kù)。

右邊小括號(hào)里的是數(shù)據(jù)庫(kù)名。

我們把這個(gè)保存在變量 conn 里,這個(gè)變量名可以自己起

公式:

變量名 = sqlite3.connect( '你要的數(shù)據(jù)庫(kù)名.db' )

2.2創(chuàng)建游標(biāo)

還是先放代碼

cur = conn.cursor()

在 2.1 中,我們創(chuàng)建了與數(shù)據(jù)庫(kù)的連接,我們現(xiàn)在還需要一個(gè)游標(biāo)來執(zhí)行 sql 命令,

所以我們要用 conn 的 cursor 函數(shù)創(chuàng)建一個(gè)游標(biāo)。

conn 就是剛才 2.1 中創(chuàng)建的保存數(shù)據(jù)庫(kù)的變量,你要用你定義的變量名,

再定義一個(gè)變量表示這個(gè)游標(biāo)。

公式:

變量 = 數(shù)據(jù)庫(kù)變量.cursor()

2.3創(chuàng)建 table

先放代碼

import sqlite3
def check(db_name,table_name):
    conn = sqlite3.connect(db_name)
    cursor = conn.cursor()
    sql = '''SELECT tbl_name FROM sqlite_master WHERE type = 'table' '''
    cursor.execute(sql)
    values = cursor.fetchall()
    tables = []
    for v in values:
        tables.append(v[0])
    if table_name not in tables:
        return False # 可以建表
    else:
        return True # 不能建表
conn = sqlite3.connect('數(shù)據(jù)庫(kù)名.db')
#創(chuàng)建一個(gè)游標(biāo) cursor
cur = conn.cursor()
if (check("數(shù)據(jù)庫(kù)名.db","Table名") == False):
    sql_text_1 = '''CREATE TABLE 你的table名
            (xx XX,
                xx XX);'''
    # 執(zhí)行sql語(yǔ)句
    cur.execute(sql_text_1)

代碼比較長(zhǎng),因?yàn)槲野?2.1 和 2.2 的兩行代碼也加了上去。

我們需要 table(表)來存數(shù)據(jù),創(chuàng)建 table 的代碼如下:

變量名 = '''CREATE TABLE 你的table名
            (xx XX,
                xx XX);'''
# 執(zhí)行sql語(yǔ)句
cur.execute(上面的變量名)

上面是用一個(gè)變量保存了創(chuàng)建 table 的 sql 語(yǔ)句,

下面使用 cur(就是剛才那個(gè)游標(biāo)).execute() 函數(shù)執(zhí)行創(chuàng)建 table 的語(yǔ)句。

我們也可以使用 cur.executemany 函數(shù)來同時(shí)執(zhí)行多條 sql 語(yǔ)句。

sql 語(yǔ)句的內(nèi)容,比如創(chuàng)建表的格式是上面這樣的

格式:' ' 'CREATE TABLE 你的 table 名 (xx XX, xx XX);' ' '

 這行代碼里小寫的 xx 就是你要的屬性名,比如你的數(shù)據(jù)庫(kù)是這樣

姓名班級(jí)
張三1

其中,屬性名就是 “姓名” 和 “班級(jí)”,

小寫的 xx 就應(yīng)該分別寫姓名和班級(jí)(注意,不帶引號(hào))

后面的大寫的XX就是這個(gè)屬性所接受的數(shù)據(jù)的類型,

就相當(dāng)于Python中的 int 類型和 str 類型。

只不過,我們?cè)?sql 語(yǔ)句中,把 int 類型改成了 NUMBER,把 str 類型改成了 TEXT

當(dāng)我們運(yùn)行這個(gè)代碼,我們的文件夾目錄里會(huì)多出來一個(gè) 你的數(shù)據(jù)庫(kù)名.db 文件

當(dāng)我們?cè)俅芜\(yùn)行,會(huì)發(fā)現(xiàn)程序報(bào)錯(cuò)了。

報(bào)錯(cuò)信息的大概意思是:table 已經(jīng)存在了。

這是因?yàn)槲覀兊谝淮芜\(yùn)行時(shí)已經(jīng)創(chuàng)建了 table ,我們?cè)俅芜\(yùn)行時(shí),

程序會(huì)再次創(chuàng)建同名 table,就會(huì)報(bào)錯(cuò)。

所以,我們創(chuàng)建 table 之前要判斷一下這個(gè)table存不存在,如果存在就不創(chuàng)建,如果不存在就創(chuàng)建

這個(gè)判斷我把它寫成了一個(gè)函數(shù),就是我上面代碼那個(gè) check 函數(shù)。

這一步也是我想了好長(zhǎng)時(shí)間,還找資料找了好長(zhǎng)時(shí)間才知道的

2.4插入數(shù)據(jù)

先放代碼

cur.executemany('INSERT INTO 你的table名 VALUES (?,?)', data)
conn.commit()

其中第一行代碼中 executemany() 函數(shù)的意思就是同時(shí)執(zhí)行多個(gè) sql 語(yǔ)句。

這個(gè)函數(shù)的括號(hào)里寫的逗號(hào)前面就是插入數(shù)據(jù)的 sql 語(yǔ)句,后面 data 可以是一個(gè)列表或者元組。注意,如果是列表的話,必須是列表里面有若干個(gè)元組的形式。

插入數(shù)據(jù)的 sql 語(yǔ)句的使用:

INSERT INTO 你的table名 VALUES (若干個(gè)逗號(hào),用逗號(hào)分割)

這里我們要插入 data 這些數(shù)據(jù),所以在括號(hào)里我們使用問號(hào) “?” 來代替這個(gè)元素。

大家可以回去看一下 2.3 創(chuàng)建table 的講解,在2.3中,我們創(chuàng)建了兩個(gè)屬性,分別是 “姓名” 和 “班級(jí)”。因?yàn)槲覀冇袃蓚€(gè)屬性,所以要有兩個(gè)問號(hào)。

2.5查找數(shù)據(jù)

先放代碼

def find_tb():
    cur.execute("select * from 你的table名")
    # 提取查詢到的數(shù)據(jù)
    return cur.fetchall()

這個(gè)就很簡(jiǎn)單了,我寫這個(gè)函數(shù)使用時(shí)可以把你那個(gè)table里的所有數(shù)據(jù)都取出來。

第一行是查找table的 sql 語(yǔ)句,格式是:

select * from 你的table名

下一行再用 fetchall() 函數(shù)把數(shù)據(jù)提取出來,直接 return 即可。

快樂的coding時(shí)間!

好了,前面的東西大家應(yīng)該也都看完了,來點(diǎn) demo ?

順便說一下,我這個(gè) demo 的靈感來源是最近在網(wǎng)上刷到很多高考查分的視頻,恰好最近在做這個(gè)數(shù)據(jù)庫(kù),所以說我這個(gè) demo 受考試的啟發(fā),就做了一個(gè)學(xué)生分?jǐn)?shù)系統(tǒng),其實(shí)這個(gè)特別爽,可以把自己的分?jǐn)?shù)改成全部滿分!雖然實(shí)際沒啥用,但是還是很爽的

代碼里沒有我沒講過的部分,大家可以對(duì)照上面的講解看代碼,VScode無報(bào)錯(cuò)運(yùn)行。

對(duì)了,如果有看不懂的可以私信我,不出意外的話一天之內(nèi)就能回復(fù)。

代碼:

import sqlite3
import os
def check(db_name,table_name):
    conn = sqlite3.connect(db_name)
    cursor = conn.cursor()
    sql = '''SELECT tbl_name FROM sqlite_master WHERE type = 'table' '''
    cursor.execute(sql)
    values = cursor.fetchall()
    tables = []
    for v in values:
        tables.append(v[0])
    if table_name not in tables:
        return False # 可以建表
    else:
        return True # 不能建表
def find_tb():
    cur.execute("select * from scores")
    # 提取查詢到的數(shù)據(jù)
    return cur.fetchall()
def zcd():
    os.system('cls')
    print("學(xué)生分?jǐn)?shù)管理系統(tǒng)")
    print("1.增加學(xué)生分?jǐn)?shù)信息")
    print("2.查看全部學(xué)生分?jǐn)?shù)")
    print("3.查詢分?jǐn)?shù)段內(nèi)學(xué)生分?jǐn)?shù)")
    print("4.退出")
 
if __name__ == '__main__':
    # 創(chuàng)建與數(shù)據(jù)庫(kù)的連接
    conn = sqlite3.connect('stuents_scores.db')
    #創(chuàng)建一個(gè)游標(biāo) cursor
    cur = conn.cursor()
    # 如果沒有表則執(zhí)行建表的sql語(yǔ)句
    if (check("stuents_scores.db","scores") == False):
        sql_text_1 = '''CREATE TABLE scores
                (姓名 TEXT,
                    班級(jí) TEXT,
                    性別 TEXT,
                    語(yǔ)文 NUMBER,
                    數(shù)學(xué) NUMBER,
                    英語(yǔ) NUMBER,
                    總分 NUMBER);'''
        # 執(zhí)行sql語(yǔ)句
        cur.execute(sql_text_1)
    zcd()
    while True:
        op = int(input("請(qǐng)輸入:"))
        if op == 1:
            S_name = input("請(qǐng)輸入要添加的學(xué)生的姓名(如:張三):")
            S_class = input("請(qǐng)輸入要添加的學(xué)生的班級(jí)(如:一班):")
            S_xb = input("請(qǐng)輸入該學(xué)生性別:")
            S_Chinese = int(input("請(qǐng)輸入該學(xué)生語(yǔ)文成績(jī)(只輸入一個(gè)數(shù)字,如:82):"))
            S_Maths = int(input("請(qǐng)輸入該學(xué)生數(shù)學(xué)成績(jī)(只輸入一個(gè)數(shù)字,如:95):"))
            S_English = int(input("請(qǐng)輸入該學(xué)生英語(yǔ)成績(jī)(只輸入一個(gè)數(shù)字,如:98):"))
            S_gj = S_Maths+S_Chinese+S_English # 總分
            data = [(S_name, S_class, S_xb, S_Chinese, S_Maths, S_English,S_gj)]
            cur.executemany('INSERT INTO scores VALUES (?,?,?,?,?,?,?)', data)
            conn.commit()
            # cur.close()
            # conn.close()
            print("成功!")
            os.system('pause')
            os.system('cls')
            zcd()
        elif op == 2:
            info_list = find_tb()
            print("全部學(xué)生信息(排名不分前后):")
            for i in range(len(info_list)):
                print("第"+str(i+1)+"個(gè):")
                print("學(xué)生姓名:"+str(info_list[i][0]))
                print("學(xué)生班級(jí):"+str(info_list[i][1]))
                print("學(xué)生性別:"+str(info_list[i][2]))
                print("學(xué)生語(yǔ)文成績(jī):"+str(info_list[i][3]))
                print("學(xué)生數(shù)學(xué)成績(jī):"+str(info_list[i][4]))
                print("學(xué)生英語(yǔ)成績(jī):"+str(info_list[i][5]))
                print("學(xué)生總成績(jī):"+str(info_list[i][6]))
                os.system('pause')
                os.system('cls')
                zcd()
        elif op == 3:
            info_list = find_tb()
            fen = int(input("你要要查詢總成績(jī)高于n分的學(xué)生, 請(qǐng)輸入n:"))
            for i in range(len(info_list)):
                if info_list[i][6] >= fen:
                    print("查詢結(jié)果:")
                    print("第"+str(i+1)+"個(gè):")
                    print("學(xué)生總成績(jī):"+str(info_list[i][6]))
            os.system('pause')
            os.system('cls')
            zcd()
        elif op == 4:
            os.system('cls')
            break
 

最后

到此這篇關(guān)于Python數(shù)據(jù)庫(kù)sqlite3詳解的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)庫(kù)sqlite3內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中isnumeric()方法的使用簡(jiǎn)介

    Python中isnumeric()方法的使用簡(jiǎn)介

    這篇文章主要介紹了Python中isnumeric()方法的使用,isnumeric()方法的使用是Python入門中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • 接口自動(dòng)化多層嵌套json數(shù)據(jù)處理代碼實(shí)例

    接口自動(dòng)化多層嵌套json數(shù)據(jù)處理代碼實(shí)例

    這篇文章主要介紹了接口自動(dòng)化多層嵌套json數(shù)據(jù)處理代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • python jieba分詞并統(tǒng)計(jì)詞頻后輸出結(jié)果到Excel和txt文檔方法

    python jieba分詞并統(tǒng)計(jì)詞頻后輸出結(jié)果到Excel和txt文檔方法

    本篇文章主要介紹了python jieba分詞并統(tǒng)計(jì)詞頻后輸出結(jié)果到Excel和txt文檔方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 如何用OpenCV -python3實(shí)現(xiàn)視頻物體追蹤

    如何用OpenCV -python3實(shí)現(xiàn)視頻物體追蹤

    OpenCV是一個(gè)基于BSD許可(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺庫(kù),可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。這篇文章主要介紹了如何用OpenCV -python3實(shí)現(xiàn)視頻物體追蹤,需要的朋友可以參考下
    2019-12-12
  • python 字典item與iteritems的區(qū)別詳解

    python 字典item與iteritems的區(qū)別詳解

    這篇文章主要介紹了python 字典item與iteritems的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python實(shí)現(xiàn)推送百度鏈接的示例代碼

    Python實(shí)現(xiàn)推送百度鏈接的示例代碼

    有時(shí)為了提高搜索效率,也讓搜索引擎更容易發(fā)現(xiàn)自己的文章,我們需要將文章鏈接推送到百度站長(zhǎng)平臺(tái),起到快速收錄的目的。本文將主要介紹如何通過Python實(shí)現(xiàn)這一功能,需要的可以參考一下
    2021-12-12
  • Django渲染Markdown文章目錄的方法示例

    Django渲染Markdown文章目錄的方法示例

    這篇文章主要介紹了Django渲染Markdown文章目錄的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • pytorch安裝及環(huán)境配置的完整過程

    pytorch安裝及環(huán)境配置的完整過程

    這篇文章主要介紹了pytorch安裝及環(huán)境配置的完整過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • python中np.multiply()、np.dot()和星號(hào)(*)三種乘法運(yùn)算的區(qū)別詳解

    python中np.multiply()、np.dot()和星號(hào)(*)三種乘法運(yùn)算的區(qū)別詳解

    這篇文章主要介紹了python中np.multiply()、np.dot()和星號(hào)(*)三種乘法運(yùn)算的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python 實(shí)現(xiàn)視頻 圖像幀提取

    python 實(shí)現(xiàn)視頻 圖像幀提取

    今天小編就為大家分享一篇python 實(shí)現(xiàn)視頻 圖像幀提取,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評(píng)論