python数据库sqlite3_Python数据库之SQLite3
SQLite是一種嵌入式數(shù)據(jù)庫(kù),它的數(shù)據(jù)庫(kù)就是一個(gè)文件。其本身是由C語(yǔ)言編寫,體積很小,經(jīng)常集成在各種應(yīng)用程序中,同樣也非常適合數(shù)據(jù)庫(kù)入門學(xué)習(xí)。默認(rèn)Python 2.5以上版本中已經(jīng)集成在標(biāo)準(zhǔn)庫(kù)中,無(wú)需安裝即可使用。
在學(xué)習(xí)和使用SQLite3之前,我們先明確幾個(gè)概念,為了方便理解,這里用excel類比:數(shù)據(jù)庫(kù):你可以將其看作一個(gè)Excel工作簿,一個(gè)數(shù)據(jù)庫(kù)就是一個(gè)Excel文件;
表:表是數(shù)據(jù)庫(kù)中存放關(guān)系數(shù)據(jù)的集合,你可以看作一個(gè)Excel工作表,也就是一個(gè)sheet,通常一個(gè)數(shù)據(jù)庫(kù)中會(huì)有多個(gè)表;
那么參照Excel就可以聯(lián)想到有哪些操作了,也就是我們常說(shuō)的增刪改查,比如:打開/創(chuàng)建數(shù)據(jù)庫(kù);
創(chuàng)建/刪除/重命名表;
新增行/列;
刪除行/列;
查詢/修改字段內(nèi)容;
...SQLite3在python中是通過(guò)sqlite3模塊驅(qū)動(dòng)的,所以要使用SQLite3需要先導(dǎo)入該模塊
# 導(dǎo)入sqlite3模塊
import sqlite3導(dǎo)入模塊后首先要?jiǎng)?chuàng)建/鏈接數(shù)據(jù)庫(kù),然后創(chuàng)建游標(biāo)對(duì)象。
# 鏈接數(shù)據(jù)庫(kù),若數(shù)據(jù)庫(kù)不存在則創(chuàng)建
con = sqlite3.connect("E:/Python3/123.db")
# 在內(nèi)存中創(chuàng)建數(shù)據(jù)庫(kù)
con = sqlite3.connect(":memory:")
# 創(chuàng)建游標(biāo)對(duì)象
cur = con.cursor()通過(guò)游標(biāo)對(duì)象對(duì)數(shù)據(jù)庫(kù)表進(jìn)行操作
# 新建表abc,包含id,name,age三列,sqlite可以省略類型,ID為主鍵(主鍵不能重復(fù))并且不能為空,若已有該表則報(bào)錯(cuò)
cur.execute("CREATE TABLE abc(id TEXT PRIMARY KEY NOT NULL,name TEXT,age INT)")
# 新建表xyz,若已有該表則忽略,
cur.execute("CREATE TABLE IF NOT EXISTS xyz(id TEXT PRIMARY KEY NOT NULL,name TEXT,age INT)")
# 刪除表xyz
cur.execute("DROP TABLE xyz")
# 修改已有表名稱,abc>>mytable
cur.execute("ALTER TABLE abc RENAME TO mytable")通過(guò)游標(biāo)對(duì)象對(duì)表內(nèi)容進(jìn)行操作
# 在已有表中添加列abc,字段類型為text,若已有該列則報(bào)錯(cuò)
cur.execute("ALTER TABLE mytable ADD abc TEXT")
# 修改已有列的列名稱:看文檔應(yīng)該是這么寫但一直報(bào)錯(cuò),可能是python api 中 alter方法并不支持重命名列
# con.execute("ALTER TABLE mytable RENAME COLUMN abc TO sex")
# 在表mytable中插入一條記錄,兩種方法,一般用第二種方法,較為安全
cur.execute("INSERT INTO mytable (id,name) VALUES ('0','狗蛋')")
cur.execute("INSERT INTO mytable(id,name) VALUES(?,?)",("1","張三豐"))
# 在表mytable中插入一條記錄,若存在即忽略
cur.execute("INSERT OR IGNORE INTO mytable (id,name) VALUES ('0','狗蛋')")
# 在表mytable中插入多條記錄
info = [("2","張無(wú)忌"),("3","謝遜"),("4","令狐沖")]
cur.executemany("INSERT INTO mytable(id,name) VALUES(?,?)",info)
# 對(duì) seq_of_parameters 中的所有參數(shù)或映射執(zhí)行一個(gè) SQL 命令。
# cur.executemany(sql, seq_of_parameters)
# 執(zhí)行多個(gè) SQL 語(yǔ)句。它首先執(zhí)行 COMMIT 語(yǔ)句,然后執(zhí)行作為參數(shù)傳入的 SQL 腳本。所有的 SQL 語(yǔ)句應(yīng)該用分號(hào)(;)分隔。
# cur.executescript(sql_script)
# 查詢數(shù)據(jù)
cur.execute("SELECT id,name FROM mytable")
cur.execute("SELECT * FROM mytable")
# 獲取查詢結(jié)果集中所有(剩余)的行,返回一個(gè)列表
print(cur.fetchall())
# 修改記錄,在id為3的記錄中將該條記錄的name字段內(nèi)容修改為金毛獅王
cur.execute("UPDATE mytable SET name = ? where id = ?",("金毛獅王","3"))
# 修改一條記錄多個(gè)字段,在id為3的記錄中將該條記錄的name字段內(nèi)容修改為金毛獅王,age改為44
cur.execute("UPDATE mytable SET name = ?,age = ? where id = ?",("金毛獅王",44,"3"))
# 刪除整條記錄
n = cur.execute("delete from mytable where id=?",("1",)) #逗號(hào)不能省,元組元素只有一個(gè)的時(shí)候一定要加逗號(hào)
print("刪除{num}行記錄".format(num = n.rowcount))操作完成后保存及關(guān)閉數(shù)據(jù)庫(kù)
# 事務(wù)提交,保存修改內(nèi)容。
con.commit()
# 事務(wù)回滾,數(shù)據(jù)庫(kù)回到上次提交保存的狀態(tài)。
con.rollback()
# 數(shù)據(jù)庫(kù)關(guān)閉,不自動(dòng)提交保存。如果在關(guān)閉數(shù)據(jù)庫(kù)連接之前沒(méi)有調(diào)用 commit(),那么你的修改將會(huì)丟失!
con.close()
至此SQLite3在python中基本操作基本介紹完成了,更深入的操作可以訪問(wèn)官方文檔自行研究。也可以關(guān)注我的個(gè)人公眾號(hào)JonCode獲取更多Python知識(shí)。
總結(jié)
以上是生活随笔為你收集整理的python数据库sqlite3_Python数据库之SQLite3的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OPPO Pad 2 平板电脑发布:搭载
- 下一篇: 比亚迪旗下仰望汽车官方解读:仰望 U8