日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

SQLite简易入门

發(fā)布時間:2025/7/14 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQLite简易入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文內(nèi)容來源:https://www.dataquest.io/mission/129/introduction-to-sql

本文所用數(shù)據(jù)來源:https://github.com/fivethirtyeight/data/tree/master/college-names

摘要:主要簡介了SQLite的一些簡易操作(增刪改查)

原始數(shù)據(jù)展示(數(shù)據(jù)庫facts存儲了如下的這張表,主要字段描述:

code - 國家代碼,name - 國家名稱, area - 國土面積, created_at - 創(chuàng)建這個表的時間)

?

操作數(shù)據(jù)

?

查詢

#數(shù)據(jù)展示SELECT [columnA, columnB, ...]FROM tableName;#如: 查詢數(shù)據(jù)庫中code和name兩列的數(shù)據(jù)SELECT code, nameFROM facts;#條件查詢,使用where來界定查詢條件,如,查詢?nèi)丝诖笥?億的國家代碼和名稱SELECT code, nameFROM factsWHERE population> 100000000;

在where語句中可以使用的比較符號:

  • 小于: <
  • 小于或等于: <=
  • 大于: >
  • 大于或等于: >=
  • 等于: =
  • 不等于: !=

sqlite中可以直接對日期數(shù)據(jù)進行比較,譬如,查詢在2015-11-01 14:00之前創(chuàng)建的數(shù)據(jù)

SELECT * FROM facts WHERE created_at < "2015-11-01 14:00"

注意:在雙引號中就是日期格式的數(shù)據(jù),必須按照yyyy-mm-dd HH:MM:SS的格式

?

限定返回的數(shù)據(jù)數(shù)量

# 有時候只想查看返回數(shù)據(jù)的前幾條,使用limit, 如:查詢前五條數(shù)據(jù)

select * from facts limit 5;

?

邏輯運算符

可以使用邏輯運算符and和or來組合多重查詢條件

SELECT [column1, column2,...] FROM [table1]WHERE [condition1] AND [condition2]#如,人口大于1億且國土面積大于100000的國家名稱select name from facts where population> 100000000 and area_land> 100000 limit 10;

?

組合多個查詢條件

#如:查詢在人口過億的國家中,出生率大于20或者死亡率小于10的數(shù)據(jù)select namefrom factswhere (population >100000000) and (birth_rate > 20 or death_rate < 10);

?

排序

通過order by語句來指定排序的列,asc是升序,desc是降序

SELECT [column1, column2,...] FROM [table1]WHERE [conditions]..ORDER BY column1 [ASC or DESC]# 按國家名稱降序排序select name from facts order by name desc limit 10;#多列排序,譬如,在一個存儲人名的表中,首先對姓排序,然后在同一個姓中再對名排序select [column1, column2..]from table_nameorder by column1 (asc or desc), column2 (asc or desc)

?

查詢一張表的數(shù)據(jù)類型,sqlite中主要有以下的數(shù)據(jù)類型:

  • INTEGER - 類似于python中的整型類型
  • REAL - 類似于python中的浮點數(shù)類型
  • FLOAT - 類似于python中的浮點數(shù)類型
  • TEXT - 類似于python中的字符串類型
  • VARCHAR(255) - 類似于python中的字符串類型

之所以同一個類型有不同的名字,是因為sqlite用來兼容其他數(shù)據(jù)庫所用的,查詢一張表的數(shù)據(jù)類型,使用pragma語句

PRAGMA table_info(tableName);#結(jié)果會返回一個列表(截取):[[0, "id", "INTEGER", 1, null, 1], [1, "code", "varchar(255)", 1, null, 0], [2, "name", "varchar(255)", 1, null, 0]]

該列表的內(nèi)容內(nèi)容如下,pk = 1表明該字段是一個主鍵:

?

插入

往數(shù)據(jù)庫中插入數(shù)據(jù),使用insert語句,注意日期數(shù)據(jù)必須符合格式:yyyy-mm-dd HH:MM:SS

INSERT INTO tableNameVALUES (value1, value2, ...);#例子:INSERT INTO factsVALUES (262, "dq", "DataquestLand", 60000, 40000, 20000, 500000, 100, 50, 10, 20, "2016-02-25 12:00:00", "2016-02-25 12:00:00");

如果要插入的數(shù)據(jù)中有空值,就用NULL代替即可

?

更新

UPDATE tableNameSET column1=value1, column2=value2, ...WHERE column1=value3, column2=value4, ...# 例如,將United States改為DataquestLandupdate factsset name='DataquestLand'where name='United States';

?

刪除

DELETE FROM tableNameWHERE column1=value1, column2=value2, ...;# 例如,將名為Canada的數(shù)據(jù)全部刪除delete from factswhere name='Canada';

?

使用python和sqlite交互

sqlite數(shù)據(jù)庫并不需要開啟一個單獨的服務(wù)器進程,并且把所有的數(shù)據(jù)都存儲在硬盤上的一個文件中,從python2.5開始,sqlite就集成在了python語言中,所以不需要額外安裝庫來操作sqlite

?

連接數(shù)據(jù)庫

import sqlite3conn = sqlite3.connect(‘countries.db’) #使用connect()方法來連接數(shù)據(jù)庫,該參數(shù)指定數(shù)據(jù)庫的名稱

?

python是通過cursor對象來操作sql語句的,cursor對象可以執(zhí)行如下功能:

  • 查詢數(shù)據(jù)庫
  • 解析從數(shù)據(jù)庫返回的結(jié)果
  • 將數(shù)據(jù)庫的返回結(jié)果轉(zhuǎn)化為python對象
  • 將cursor的值保存為本地變量

注意:cursor對象把返回的結(jié)果保存到一個元組的列表中,如下

import sqlite3conn = sqlite3.connect("countries.db") # 連接數(shù)據(jù)庫cursor = conn.cursor() # 返回一個cursor對象query = 'select name from facts;' # 將查詢語句保存為字符串格式cursor.execute(query) # 執(zhí)行查詢語句names = cursor.fetchall() # 保存全部的返回結(jié)果print(names[0:2]) # 顯示前兩個數(shù)據(jù)#結(jié)果:一個列表,列表中的每個元素是一個元組[('Afghanistan,), ('Albania',)]

有時候可能需要逐條返回查詢結(jié)果,就是用fetchone(),需要一次返回n條結(jié)果,就是用fetchmany(n)。因為在cursor對象中會保存一個內(nèi)部的計數(shù)器,在每次得到返回結(jié)果時都會增加計數(shù)器

# 上面的查詢語句等價于這樣import sqlite3conn = sqlite3.connect("countries.db") # 連接數(shù)據(jù)庫cursor = conn.cursor() # 返回一個cursor對象query = 'select name from facts;' # 將查詢語句保存為字符串格式cursor.execute(query) # 執(zhí)行查詢語句names = cursor.fetchmany(2) # 保存前2條結(jié)果print(names)

在某個進程連接著一個sqlite數(shù)據(jù)庫的時候,其他進程是不能訪問該數(shù)據(jù)庫的,所以在操作完數(shù)據(jù)庫之后需要關(guān)閉連接,注意,在關(guān)閉連接的時候,之前對數(shù)據(jù)庫的更改會自動保存并生效。

conn = sqlite3.connect("countries.db")conn.close()

?

?

操作表結(jié)構(gòu)

上面的內(nèi)容都是對表中的數(shù)據(jù)進行操作,現(xiàn)在要對表的結(jié)構(gòu)進行操作,譬如創(chuàng)建新表,增加一列等

增加列

# 往一張表中增加一個新列ALTER TABLE tableNAmeADD columnName dataType;# 例如,往該表中增加一列名為leader,且數(shù)據(jù)格式為textalter table facts add leader text;

?

創(chuàng)建新表

CREATE TABLE dbName.tableName(column1 dataType1 PRIMARY KEY,column2 dataType2,column3 dataType3,...);# 例如,在數(shù)據(jù)庫factbook中創(chuàng)建一個新表用來保存國家領(lǐng)導(dǎo)人的信息CREATE TABLE factbook.leaders(id integer PRIMARY KEY, # 指定主鍵name text,country text);

創(chuàng)建具有外鍵的表

CREATE TABLE factbook.leaders(id integer PRIMARY KEY,name text,country integer,worth float,FOREIGN KEY(country) REFERENCES facts(id) # 該外鍵指定要連接那個表);

?

多表聯(lián)合查詢

SELECT [column1, column2, ...] from tableName1INNER JOIN tableName2 # 指定另一張表ON tableName1.column3 == tableName2.column4;# 譬如,查找兩張表中編號一致的數(shù)據(jù)SELECT * from landmarksINNER JOIN factsON landmarks.country == facts.id;# 除了INNER JOIN還有LEFT OUTER JOIN(左外連接)

在上面的例子中,landmarks是在左邊的表,facts是在右邊的表,在執(zhí)行JOIN的時候,會變成這樣

紅線左邊的就是landmarks表的值,右邊就是facts表的值,因為id和name兩個字段都重復(fù)了,所以右邊的表會加上后綴1

  • INNER JOIN - 只展示符合查詢條件的值,在上圖中就是左邊的country值等于右邊id_1的值的那些行
  • LEFT OUTER JOIN - 左表中有不匹配的數(shù)據(jù)時,在合并的表中的其他字段就顯示為NULL

關(guān)于JOIN,更多資料參考:http://www.yiibai.com/sqlite/sqlite_using_joins.html

轉(zhuǎn)載于:https://www.cnblogs.com/kylinlin/p/5251165.html

總結(jié)

以上是生活随笔為你收集整理的SQLite简易入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。