簡介
SQLite是一款輕量級的數(shù)據(jù)庫。
無需像MySQL等數(shù)據(jù)庫,使用獨立的服務(wù)器進程與之通信,而是將整個數(shù)據(jù)庫都存儲在磁盤上一個單一的文件中,可以通過多種語言將其連接到程序中,并使用SQL查詢語言訪問它。
sqlite3就是Python標準庫中一個專門用于訪問SQLite數(shù)據(jù)庫文件的模塊。
sqlite模塊用法
-
連接數(shù)據(jù)庫
使用sqlite3模塊,必須先創(chuàng)建一個Connection對象,代表與程序連接的數(shù)據(jù)庫。
import sqlite3
conn = sqlite3.connect('TCG_APP.db')
-
執(zhí)行語句
連接數(shù)據(jù)庫之后,需要從連接中獲取Cursor游標對象,調(diào)用它的execute()方法來執(zhí)行SQL語句。
cs = conn.cursor()
cs.execute('SELECT uri FROM comment_table')
-
獲取查詢結(jié)果
執(zhí)行SQL查詢語句之后,需要調(diào)用Cursor的fetchone()或fetchall()方法,獲取查詢到的第一條或者全部結(jié)果。
result = cs.fetchall()
-
保存操作
如果調(diào)用execute()方法對數(shù)據(jù)庫中的數(shù)據(jù)進行了更改操作,需要調(diào)用Connection對象的commit()方法,用以保存操作,否則操作不會被自動保存。
cs.execute('''INSERT INTO comment_table VALUES('US20200328300001', True)''')
conn.commit()
-
關(guān)閉連接
如果所有操作完成了,可以調(diào)用Connection對象的close()方法,關(guān)閉連接數(shù)據(jù)庫
conn.close()
注意事項
-
SQL注入
通常在執(zhí)行SQL語句時,需要使用一些Python變量的值拼接該語句。
不應(yīng)該使用Python的字符串操作來拼接查詢語句,因為這樣可能會導(dǎo)致SQL注入攻擊。
應(yīng)該在SQL語句中,使用?占位符來代替值,然后把對應(yīng)的值所組成的元組作為execute()方法的第二個參數(shù)。
param = ('123', True)
cs.execute('''SELECT comment FROM comment_table WHERE relation_id=? AND merge_mark=?''', param)
result_list = cs.fetchall()
SQL語句
總結(jié)了一些本次用到的基本SQL語句
-
創(chuàng)建表
語法:CREATE TABLE 表名(列名1,列名2,...)
示例:
CREATE TABLE comment_table(relation_id UNIQUE, merge_mark)
創(chuàng)建了一張名為comment_table,列名為realtion_id與merge_mark的表,其中realtion_id是唯一鍵值。
增加該表不存在時才創(chuàng)建的判斷機制
CREATE TABLE if not exists comment_table(relation_id UNIQUE, merge_mark)
-
查詢
語法:SELECT ... FROM ... WHERE ... AND ... OR...
示例:
SELECT comment FROM comment_table WHERE suite_name=? AND merge_mark=? OR relation_ID=?
-
插入
語法:INSERT INTO 表名 VALUES(各列的值)
示例:
INSERT INTO comment_table VALUES(?, ?, ?, ?, ?, ?, ?, ?)
-
刪除
語法:DELETE FROM 表名 WHERE 列名=值
示例:
DELETE FROM comment_table WHERE uri=?
-
更改
語法:UPDATE 表名 SET 列名1=? WHERE 列名2=值
示例:
UPDATE comment_table SET merge_mark=? WHERE relation_id=?