溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python中的sqlite3數(shù)據(jù)庫怎么用

發(fā)布時間:2022-11-14 09:10:26 來源:億速云 閱讀:130 作者:iii 欄目:編程語言

今天小編給大家分享一下Python中的sqlite3數(shù)據(jù)庫怎么用的相關(guān)知識點,內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

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

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

Python + Mysql = SQLite

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

import sqlite3

2.模塊的使用

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

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

先放上代碼

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

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

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

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

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

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

公式:

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

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

還是先放代碼

cur = conn.cursor()

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

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

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

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

公式:

變量 = 數(shù)據(jù)庫變量.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ù)庫名.db')
#創(chuàng)建一個游標(biāo) cursor
cur = conn.cursor()
if (check("數(shù)據(jù)庫名.db","Table名") == False):
    sql_text_1 = '''CREATE TABLE 你的table名
            (xx XX,
                xx XX);'''
    # 執(zhí)行sql語句
    cur.execute(sql_text_1)

代碼比較長,因為我把 2.1 和 2.2 的兩行代碼也加了上去。

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

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

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

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

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

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

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

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

姓名班級
張三1

其中,屬性名就是 “姓名” 和 “班級”,

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

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

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

只不過,我們在 sql 語句中,把 int 類型改成了 NUMBER,把 str 類型改成了 TEXT。

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

當(dāng)我們再次運行,會發(fā)現(xiàn)程序報錯了。

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

這是因為我們第一次運行時已經(jīng)創(chuàng)建了 table ,我們再次運行時,

程序會再次創(chuàng)建同名 table,就會報錯。

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

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

這一步也是我想了好長時間,還找資料找了好長時間才知道的

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

先放代碼

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

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

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

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

INSERT INTO 你的table名 VALUES (若干個逗號,用逗號分割)

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

大家可以回去看一下 2.3 創(chuàng)建table 的講解,在2.3中,我們創(chuàng)建了兩個屬性,分別是 “姓名” 和 “班級”。因為我們有兩個屬性,所以要有兩個問號。

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

先放代碼

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

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

第一行是查找table的 sql 語句,格式是:

select * from 你的table名

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

代碼:

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ù)庫的連接
    conn = sqlite3.connect('stuents_scores.db')
    #創(chuàng)建一個游標(biāo) cursor
    cur = conn.cursor()
    # 如果沒有表則執(zhí)行建表的sql語句
    if (check("stuents_scores.db","scores") == False):
        sql_text_1 = '''CREATE TABLE scores
                (姓名 TEXT,
                    班級 TEXT,
                    性別 TEXT,
                    語文 NUMBER,
                    數(shù)學(xué) NUMBER,
                    英語 NUMBER,
                    總分 NUMBER);'''
        # 執(zhí)行sql語句
        cur.execute(sql_text_1)
    zcd()
    while True:
        op = int(input("請輸入:"))
        if op == 1:
            S_name = input("請輸入要添加的學(xué)生的姓名(如:張三):")
            S_class = input("請輸入要添加的學(xué)生的班級(如:一班):")
            S_xb = input("請輸入該學(xué)生性別:")
            S_Chinese = int(input("請輸入該學(xué)生語文成績(只輸入一個數(shù)字,如:82):"))
            S_Maths = int(input("請輸入該學(xué)生數(shù)學(xué)成績(只輸入一個數(shù)字,如:95):"))
            S_English = int(input("請輸入該學(xué)生英語成績(只輸入一個數(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)+"個:")
                print("學(xué)生姓名:"+str(info_list[i][0]))
                print("學(xué)生班級:"+str(info_list[i][1]))
                print("學(xué)生性別:"+str(info_list[i][2]))
                print("學(xué)生語文成績:"+str(info_list[i][3]))
                print("學(xué)生數(shù)學(xué)成績:"+str(info_list[i][4]))
                print("學(xué)生英語成績:"+str(info_list[i][5]))
                print("學(xué)生總成績:"+str(info_list[i][6]))
                os.system('pause')
                os.system('cls')
                zcd()
        elif op == 3:
            info_list = find_tb()
            fen = int(input("你要要查詢總成績高于n分的學(xué)生, 請輸入n:"))
            for i in range(len(info_list)):
                if info_list[i][6] >= fen:
                    print("查詢結(jié)果:")
                    print("第"+str(i+1)+"個:")
                    print("學(xué)生總成績:"+str(info_list[i][6]))
            os.system('pause')
            os.system('cls')
            zcd()
        elif op == 4:
            os.system('cls')
            break

以上就是“Python中的sqlite3數(shù)據(jù)庫怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI