日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python自带的数据库_Python小白的数据库入门

發布時間:2025/4/17 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python自带的数据库_Python小白的数据库入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

SQL數據庫數據庫SQL語言入門SQL簡介SQL 的作用

SQL語句分類

SQLite 數據庫SQLite 中的數據類型

DDL語句創建表

刪除表

修改表

DML語句添加

刪除

修改

查詢

Python中的SQLite操作SQLite游標對象

Sqlite防注入

數據庫可視化

歸納總結

前言可以毫不夸張的說,不懂數據庫,不是真正的程序員。紛繁復雜,界面絢麗的程序,最本質的無非都是在操作數據而已。既然有數據,那就肯定需要一個東西去存放并管理這些數據,而數據庫就是這么一個軟件。

有些人可能沒有直接接觸過數據庫,但我相信大部分人都用過Excel這種表格工具。實際上,它就相當于一個簡單的數據庫,與之相比,更貼切的可能是 Access數據庫。

在學習數據庫之前,我們先看看數據庫到底長什么樣子,得先有感性認識才行

這是MySql數據庫

MySQL

這是Sqlite3數據庫

sqlite3

以上兩個是主流的關系型數據庫,我們觀察之后發現,它們與我們熟知的Excel好像也沒有什么不同。關系型數據庫里面放的都是一張張的表,就如同Excel中的工作簿。就算不熟悉Excel,但每一張表也都是我們從小到大所熟悉的那種表結構,例如課程表、值日表之類的。

與Excel不同的是,數據庫提供了快速的、高效的編程接口,可以讓我們非常簡潔、靈活的以代碼去操作這個數據庫,例如刪除一條數據、新增一條數據、對數據進行排序,就想我們經常對價格、銷量、好評排序那樣。這些都是Excel無法比擬的。

SQL數據庫所謂數據庫,即存儲數據的倉庫。每一個數據庫可以存放若干個數據表,這里的數據表就是我們通常所說的二維表,分為行和列,每一行稱為一條記錄,每一列稱為一個字段。表中的列是固定的,可變的是行。要注意,我們通常需要在列中指定數據的類型,在行中添加數據,即我們每次添加一條記錄,就添加一行,而不是添加一列。對數據庫的操作可以概括為就是向數據庫中添加、刪除、修改和查詢數據,其中查詢功能最為復雜。

先簡單了解了一下數據庫,接下來學習一下數據庫相關的概念。

數據庫SQL語言入門

SQL簡介結構化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的編程語言,是一種數據庫查詢和設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統.

簡而言之,SQL就是一種腳本編程語言,是絕大多數數據庫的通用語言。沒錯,剛學會Python,接下來又得學習新的語言……不過,對于非DBD(Database Desktop,數據庫維護人員)的開發人員而言,并不需要對SQL語言掌握得太深入,SQL的基本用法實際上是比Python還簡單的。

SQL 的作用SQL 面向數據庫執行查詢

SQL 可在數據庫中插入新的記錄

SQL 可更新數據庫中的數據

SQL 可從數據庫刪除記錄

SQL 可在數據庫中創建新表

SQL 可在數據庫中創建視圖

SQL語句分類

共分為四種DDL(data definition language)數據定義語言

主要是對數據庫中的表以及表中的列等的定義和操作

DML(data manipulation language)數據操縱語言

對數據庫里的表中數據進行操作的語言

DCL(Data Control Language)數據庫控制語言

TCL(Transaction Control Language)事務控制語言

其中DDL和DML是最常用的語言,是重中之重,其他兩種忽略

SQLite 數據庫SQLite 是一款輕型的嵌入式數據庫,占用資源及其低,這是它受人青睞的原因之一,在嵌入式設備(如手機)中只需要幾百 K 的內存即可。它不僅支持數據庫通用的增刪改查,還支持事務功能,功能還比較強大。

SQLite 數據庫實際上就是一個文件,這個文件的后綴名通常是 .db,database的縮寫,它的第一個版本誕生于 2000 年,最近版本為 SQLite3。

除了SQLite數據庫,還有其他幾種常見的數據庫,例如Oracle、SQL Server、MySQL等等

這里我們選取SQLite作為入門來學習數據庫,因為它搭建非常簡單,極容易上手。與之相比,其他的數據庫都需安裝,配置,啟動服務等等操作。而Python在標準庫已經自帶了這種數據庫。

SQLite 中的數據類型

數據庫是存儲數據的,它自然會對數據的類型進行劃分,SQLite 劃分有五種數據類型(不區分大小寫)NULL 類型,取值為 NULL,表示沒有或者為空

INTERGER類型,取值為帶符號的整數,即可為負整數

REAL類型,取值為浮點數

TEXT 類型,取值是字符串

BLOB類型,是一個二進制的數據塊,即字節串,可用于存放純二進制數據,例如圖片

DDL語句

簡單說,其實主要就是用來創建表的,當然也可以刪除表,或者修改表的定義,比如原表只有三列,現在需要五列,就要修改表的定義概念理解表: 可以理解為我們通常所說的二維表,分為橫縱(行列),用于存放數據

字段: 就是表中的列名

主鍵:就是一種特殊的列。每一行數據的主鍵不能相同,是這一行數據的唯一標識,就像人的身份證號

創建表1create table 表名稱(列名1 類型 配置, 列名2 類型 配置, 列名3 類型 配置);

注意,SQL語言是不區分大小寫的,create 也可以寫成CREATE。另外,每一句SQL語句后面都需要一個;號結尾

示例:1create table contacts (

2 id integer primary key autoincrement,

3 name text not null ,

4 phone text not null default 'unknow');

上面的DDL語句創建了一個叫contacts的表,并且定義了三個列,分別是id、name和phone,并且給每一個列定義了數據類型,分別是integer、text、text,這表明,id只能是一個整數,name和phone只能是字符串。

除了這些,還對每一個列做了一些配置,或者叫約束。

primary key autoincrement 的意思是指將id這個列定義為主鍵,并且從1開始自動增長,也就是說id這個列不需要人為的手動去插入數據,它會自動增長。

not null 指明這一列不能為空,當你插入數據時,如果不插入name或者phone的值,那么就會報錯,無法完成這一次插入。

default 'unknow' default關鍵字代表設置默認值,這里指定它默認值是字符串'unkonw',當不插入這一列數據時,默認就是這個值。此處寫法是有些多余的,它與not null 一起用是沒有意義的,因為not null已經指明這一列必須插入,不可能為null,那就不需要默認值了,當然,此處只是為了演示default的用法

特別注意

當Python程序運行建表語句時,如果表已經存在了,再去創建一遍會報錯崩潰,因為你的程序第一次運行時執行了一遍建表語句,第2次第3次…去執行,表已經在第1次的時候創建了,這個時候就報錯崩潰了。因此通常需要在建表語句中加入一個判斷,判斷這個表是否存在。1create table if not exists stu_info(

2 id integer primary key autoincrement,

3 name text not null,

4 number text);

如上所示,在建表語句中增加了一個if not exists的判斷,每次運行都會先判斷,不存在才會執行后面的語句創建

刪除表1 drop table 表名稱;

2 drop table if exists 表名稱;

修改表1/* 修改表名稱 */

2alter table 原表名 rename to 新表名;

3

4/* 添加新列 */

5alter table 表名稱 add column 列名1 類型 配置,列名2 類型 配置

示例:1alter table contacts rename to students;

2alter table contacts add column email text,qq text not null;

DML語句

對數據庫里的表數據進行相應的增、刪、改、查的操作。注意,這里是表中的數據,而DDL則是對表的結構進行創建或修改,注意區分

添加1#想要插入的字段和值的順序要一一對應起來

2insert into 表名稱 (字段1,字段2,字段3……) values (被插入的值1,值2,值3……)

3

4insert into 表名稱 values(值1,值2,值3……)

要注意,使用簡略的語句,必須插入全部字段,順序對應,不能遺漏一個

示例:1insert into stu_info (name,number,age) values("zhangsan","20171220",20);

刪除1delete from 表名稱 where 字段 = 條件;

2

3# 用于刪除表中所有數據,但不刪除表

4delete from 表名 或者 delete * from 表名

示例:1delete from stu_info where number = "20171221";

修改1update 表名稱 set 字段1=值1,字段2=值2,…… where 字段 = 條件;

注意,此處值是你要修改的值,此語句可用來修改滿足條件的一行或多行

示例:1update stu_info set name = "zhangsan",age=10 where number = "20171221";

查詢1#查詢的字段就是你要查詢的列名,用*可表示查詢全部字段

2select 查詢的字段 from 表名稱 where 字段 = 條件;

3

4#查詢整張表的所有數據

5select * from 表名稱;

示例:1select * from food_types where name = "apple"

多表查詢

如果兩張表有關系,譬如,一張表是班干部表,記錄了所有班干部,另一張表是全體學生表,記錄每一個學生的情況,那么顯然這兩種表是有關系的。因為一個人既可以在學生表中,也可以在班干部表中。如果我們在班干部表中查到了他的學號,那么就可以用這個學號再去全體學生表中查出他的全部信息,包括考試成績等等這些,這就是所謂的多表查詢。

如下例,我們需要查詢的是table1中的abc字段的內容,則從table1,table2兩張表去查,當滿足條件table1中的xxx字段的內容等于table2中的xxx字段的內容時,就返回這些符合條件的數據。1select table1.abc from table1,table2 where table1.xxx=table2.xxx;

或者等價于1select table1.abc from table1 inner join table2 on table1.xxx=table2.xxx;

特別注意

SQL語句中,text類型的字符串常量需要用單引號或者雙引號括起來,推薦使用單引號。

例如:1select * from stu_info where name = 'zhangsan'

以上也就是數據庫中常說的所謂CRUD操作(create、read、update、delete),分別代表對數據的增刪改查。

Python中的SQLite

操作SQLite

操作該數據庫的大致步驟就是連接數據庫,然后對數據庫進行增刪改查等操作即可。

操作步驟導入模塊

連接數據庫,返回連接對象

調用連接對象的execute()方法,執行SQL語句,進行增刪改的操作,如進行了增添或者修改數據的操作,需調用commit()方法提交修改才能生效;execute()方法也可用于執行DDL語句進行創建表的操作

調用連接對象的cursor()方法返回游標對象,然后調用游標對象的execute()方法執行查詢語句,查詢數據庫

關閉連接對象和游標對象

示例代碼:1# 導入模塊

2import sqlite3

3

4# 連接數據庫,返回連接對象

5conn = sqlite3.connect("D:/my_test.db")

6

7# 調用連接對象的execute()方法,執行SQL語句

8# (此處執行的是DDL語句,創建一個叫students_info的表)

9conn.execute("""create table if not exists students_info (

10id integer primary key autoincrement,

11name text,

12age integer,

13address text)""")

14

15# 插入一條數據

16conn.execute("insert into students_info (name,age,address) values ('Tom',18,'北京東路')")

17

18# 增添或者修改數據只會必須要提交才能生效

19conn.commit()

20

21# 調用連接對象的cursor()方法返回游標對象

22cursor = conn.cursor()

23

24# 調用游標對象的execute()方法執行查詢語句

25cursor.execute("select * from students_info")

26

27# 執行了查詢語句后,查詢的結果會保存到游標對象中,調用游標對象的方法可獲取查詢結果

28# 此處調用fetchall方法返回一個列表,列表中存放的是元組,

29# 每一個元組就是數據表中的一行數據

30result = cursor.fetchall()

31

32#遍歷所有結果,并打印

33for row in result:

34 print(row)

35

36#關閉

37cursor.close()

38conn.close()

游標對象

調用連接對象的cursor()方法可以得到一個游標對象,那么游標到底是什么呢?其實可以把游標理解為一個指針,如下圖:

在這里插入圖片描述

圖中的指針就是游標cursor,假設右邊的表就是查詢到的結果,那么可以調用游標對象的fetchone()方法移動游標指針,每調用一次fetchone()方法就可以將游標指針向下移動一行,第一次調用fetchone()方法時,將游標從默認位置移動到第一行1# 調用游標對象的execute()方法執行查詢語句

2cursor.execute("select * from students_info")

3

4# 將游標移動到第一行

5row = cursor.fetchone()

6

7# 當查詢的結果集沒有數據時,向下移動游標會返回空,如果不是空,說明有數據

8if row !=None:

9 print(row)

一行一行的手動去移動太太麻煩,可以使用循環1# 將游標移動到第一行

2row = cursor.fetchone()

3

4# 如果返回的結果集第一行有數據,進入循環

5while row != None:

6 # 打印第一行結果

7 print(row)

8

9 # 將游標指針向下再移動一行

10 row = cursor.fetchone()

上面的例子主要講解了游標的一些概念,通常只有在確定返回的結果只有一條數據(即一行)時,才會使用fetchone()方法,比如按id查詢時,因為id是唯一的,查詢的結果只可能有一條數據或者為空,不可能有多條,這時使用fetchone方法是非常好的。當返回的結果可能為多條數據時,通常使用fetchall()方法,該方法會返回一個結果列表,遍歷這個列表就可得到多條結果。如第一個例子中的用法:1result = cursor.fetchall()

2

3#遍歷所有結果,并打印

4for row in result:

5 print(row)

之前的概念中也講到,實際上執行完查詢語句之后,所有的查詢結果已經保存到cursor對象中,可以直接遍歷cursor對象,與上面的調用fetchall()方法類似,區別就是調用fetchall()方法借助了列表,可以調用一些列表的函數對查詢結果進行操作1#調用游標對象的execute()方法執行查詢語句

2cursor.execute("select * from students_info")

3

4#直接遍歷cursor對象,并打印

5for row in cursor:

6 print(row)

Sqlite防注入

對于某些特殊符號的數據,直接使用上述方法拼接字符串,可能會造成意想不到的錯誤,因此,應當使用另一種安全的,可防Sql注入攻擊的方式插入數據。1cursor.execute("insert into students_info values (?,?,?)",

2('Tom',18,'北京東路'))

這里的?相當于占位符,execute方法的第二個參數是一個元組,元組中的元素會替換掉占位符。注意,這里和字符串拼接是不同的,會進行sql的預編譯,可防止SQL注入

數據庫可視化

當我們創建生成了數據庫之后,使用代碼或命令行來查看數據庫的內容是不方便的,這時候就需要一個界面軟件來打開數據庫查看,不同的數據庫,有不同的可視化軟件,即使同一款數據庫,也會有多種可視化工具,對于Sqlite3而言,推薦使用SQLiteStudio軟件查看 [官網鏈接] https://sqlitestudio.pl/index.rvt

歸納總結

需要注意,sqlite3模塊的connect()函數用于連接數據庫,其中傳入的參數為數據庫的路徑,如果數據庫不存在,則創建數據庫,那么該路徑就是數據庫的保存路徑;如果已經存在數據庫,則打開數據庫,該路徑為當前數據的真實路徑,路徑填寫錯誤,會造成程序崩潰!

Cursor游標對象的幾個常用方法:execute() 執行sql語句,通常執行查詢語句

fetchone() 將游標指針向下移動一行,并返回當前行的數據

fetchall() 從結果中取出所有結果,返回所有結果的列表

close() 關閉游標

查詢返回的一行數據是一個元組,如上面代碼中,print(row),其中row是一個元組,通過row[0]、row[1]等訪問每一列數據,索引0對應上面代碼中的id,索引1對應name,2對應age,以此類推

總結

以上是生活随笔為你收集整理的python自带的数据库_Python小白的数据库入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 五月婷影院 | 国产人成视频在线观看 | 美女视频黄的免费 | 色婷婷av一区二区三区大白胸 | 永久免费看黄网站 | 国产女人水真多18毛片18精品 | 亚洲色图日韩精品 | 成人动漫在线免费观看 | 深爱婷婷 | 国产亚洲AV无码成人网站在线 | 久久亚洲综合色 | 国产精品suv一区二区三区 | 国产第十页 | 国产激情视频 | 欧美 唯美 清纯 偷拍 | 国产免费av片在线 | 性视频久久 | 日韩欧美一区二区三区在线观看 | 亚州一区二区 | 久久久久无码国产精品 | 天天射狠狠干 | 中国免费看的片 | 久草网站 | 国产一区二区三区小说 | 国产成人精品一区二区三区在线 | 国产成人无码AA精品区 | 日本女人一级片 | 成人免费视频国产免费 | 日本免费高清一区二区 | аⅴ天堂中文在线网 | 欧美一区二区最爽乱淫视频免费看 | 秋霞在线观看秋 | 性欧美大战久久久久久久久 | 99精品视频在线观看免费 | 成人在线免费电影 | 久久er99热精品一区二区 | 久久久久久久一区二区 | 国产综合久久 | 狠狠v欧美v日韩v亚洲ⅴ | 国产九九精品视频 | 国产www网站| 欧美中文字幕在线 | 老女人丨91丨九色 | 中国少妇高潮 | 岛国一区二区三区 | 国产伦精品一区二区三区千人斩 | 亚洲国产精品99久久 | 加勒比伊人 | 成人综合色站 | 精产国品一二三产区m553麻豆 | 欧美a久久 | 狠狠操天天射 | 日本成人免费视频 | 国产视频手机在线观看 | 亚洲天堂伊人 | 天堂8在线天堂资源bt | 日韩三级久久 | 91视频社区 | 性色av网 | 色www| 精品视频在线观看一区二区 | 国产视频网站在线观看 | 国产第一页屁屁影院 | 日韩午夜激情视频 | 特级西西444www| 日本吃奶摸下激烈网站动漫 | 午夜色大片 | 久久久激情网 | 国产精品国产 | 亚洲精品国产精品乱码不99 | 黄色喷水网站 | 婷婷777| 秋霞视频在线观看 | 红桃一区二区三区 | 好吊操免费视频 | 日韩欧美xxx | 国产大片中文字幕 | 少妇日韩 | 亚洲欧美成人 | 看片日韩| 精品一区二区日韩 | 国产三级三级三级三级三级 | 国产无套精品一区二区三区 | 欧美在线视频免费播放 | 色屁屁草草影院ccyycom | 亚洲A∨无码国产精品 | 男女爱爱福利视频 | 国产在线一级片 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 玖玖网| 日韩一页 | 永久免费未网 | 高跟丝袜av| 久久久久久亚洲中文字幕无码 | 精品久久久久久亚洲精品 | 操网 | 国产毛片久久久久久久 | 玩弄丰满少妇xxxxx性多毛 | 香港三级网站 |