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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQLite简易入门

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

本文內容來源:https://www.dataquest.io/mission/129/introduction-to-sql

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

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

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

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

?

操作數據

?

查詢

#數據展示SELECT [columnA, columnB, ...]FROM tableName;#如: 查詢數據庫中code和name兩列的數據SELECT code, nameFROM facts;#條件查詢,使用where來界定查詢條件,如,查詢人口大于1億的國家代碼和名稱SELECT code, nameFROM factsWHERE population> 100000000;

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

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

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

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

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

?

限定返回的數據數量

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

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的數據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)

?

查詢一張表的數據類型,sqlite中主要有以下的數據類型:

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

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

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

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

?

插入

往數據庫中插入數據,使用insert語句,注意日期數據必須符合格式: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");

如果要插入的數據中有空值,就用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的數據全部刪除delete from factswhere name='Canada';

?

使用python和sqlite交互

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

?

連接數據庫

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

?

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

  • 查詢數據庫
  • 解析從數據庫返回的結果
  • 將數據庫的返回結果轉化為python對象
  • 將cursor的值保存為本地變量

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

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

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

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

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

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

?

?

操作表結構

上面的內容都是對表中的數據進行操作,現在要對表的結構進行操作,譬如創建新表,增加一列等

增加列

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

?

創建新表

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

創建具有外鍵的表

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

?

多表聯合查詢

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

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

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

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

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

轉載于:https://www.cnblogs.com/kylinlin/p/5251165.html

總結

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

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