python自帶sqlite庫_Python標準庫之sqlite3使用實例

Python自帶一個輕量級的關系型數據庫SQLite。這一數據庫使用SQL語言。SQLite作為后端數據庫,可以搭配Python建網站,或者制作有數據存儲需求的工具。SQLite還在其它領域有廣泛的應用,比如HTML5和移動端。Python標準庫中的sqlite3提供該數據庫的接口。

我將創建一個簡單的關系型數據庫,為一個書店存儲書的分類和價格。數據庫中包含兩個表:category用于記錄分類,book用于記錄某個書的信息。一本書歸屬于某一個分類,因此book有一個外鍵(foreign key),指向catogory表的主鍵id。

創建數據庫

我首先來創建數據庫,以及數據庫中的表。在使用connect()連接數據庫后,我就可以通過定位指針cursor,來執行SQL命令:

復制代碼 代碼如下:

# By Vamei

import sqlite3

# test.db is a file in the working directory.

conn = sqlite3.connect("test.db")

c = conn.cursor()

# create tables

c.execute('''CREATE TABLE category

(id int primary key, sort int, name text)''')

c.execute('''CREATE TABLE book

(id int primary key,

sort int,

name text,

price real,

category int,

FOREIGN KEY (category) REFERENCES category(id))''')

# save the changes

conn.commit()

# close the connection with the database

conn.close()

SQLite的數據庫是一個磁盤上的文件,如上面的test.db,因此整個數據庫可以方便的移動或復制。test.db一開始不存在,所以SQLite將自動創建一個新文件。

利用execute()命令,我執行了兩個SQL命令,創建數據庫中的兩個表。創建完成后,保存并斷開數據庫連接。

插入數據

上面創建了數據庫和表,確立了數據庫的抽象結構。下面將在同一數據庫中插入數據:

復制代碼 代碼如下:

# By Vamei

import sqlite3

conn = sqlite3.connect("test.db")

c??? = conn.cursor()

books = [(1, 1, 'Cook Recipe', 3.12, 1),

(2, 3, 'Python Intro', 17.5, 2),

(3, 2, 'OS Intro', 13.6, 2),

]

# execute "INSERT"

c.execute("INSERT INTO category VALUES (1, 1, 'kitchen')")

# using the placeholder

c.execute("INSERT INTO category VALUES (?, ?, ?)", [(2, 2, 'computer')])

# execute multiple commands

c.executemany('INSERT INTO book VALUES (?, ?, ?, ?, ?)', books)

conn.commit()

conn.close()

插入數據同樣可以使用execute()來執行完整的SQL語句。SQL語句中的參數,使用"?"作為替代符號,并在后面的參數中給出具體值。這里不能用Python的格式化字符串,如"%s",因為這一用法容易受到SQL注入攻擊。

我也可以用executemany()的方法來執行多次插入,增加多個記錄。每個記錄是表中的一個元素,如上面的books表中的元素。

查詢

在執行查詢語句后,Python將返回一個循環器,包含有查詢獲得的多個記錄。你循環讀取,也可以使用sqlite3提供的fetchone()和fetchall()方法讀取記錄:

復制代碼 代碼如下:

# By Vamei

import sqlite3

conn = sqlite3.connect('test.db')

c = conn.cursor()

# retrieve one record

c.execute('SELECT name FROM category ORDER BY sort')

print(c.fetchone())

print(c.fetchone())

# retrieve all records as a list

c.execute('SELECT * FROM book WHERE book.category=1')

print(c.fetchall())

# iterate through the records

for row in c.execute('SELECT name, price FROM book ORDER BY sort'):

print(row)

更新與刪除

你可以更新某個記錄,或者刪除記錄:

復制代碼 代碼如下:

# By Vamei

conn = sqlite3.connect("test.db")

c = conn.cursor()

c.execute('UPDATE book SET price=? WHERE id=?',(1000, 1))

c.execute('DELETE FROM book WHERE id=2')

conn.commit()

conn.close()

你也可以直接刪除整張表:

復制代碼 代碼如下:

c.execute('DROP TABLE book')

如果刪除test.db,那么整個數據庫會被刪除。

總結

sqlite3只是一個SQLite的接口。想要熟練的使用SQLite數據庫,還需要學習更多的關系型數據庫的知識。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370403.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370403.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370403.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GitHub上Java的Bloom Bloom實現

布隆過濾器是集數據結構的一種 。 對于那些不了解的對象,“設置數據結構”僅包含一個主要方法。 它僅用于確定特定元素是否包含在一組元素中。 大多數數據結構(例如Hash Map , Linked List或Array )都可以相當輕松地創建此函數。 …

Hibernate(十五):QBC檢索、本地SQL檢索和HQL刪除

QBC檢索QBC查詢就是通過使用Hibernate提供的Query By Criteria API來查詢對象,這種API封裝了SQL語句的動態拼裝,對查詢提供了更加面向對象的功能接口。 1)通過Critera實現具有條件的查詢 1 Test2 public void testCriteria00() {3 …

java 創建連接池失敗_java-Presto JDBC連接池創建錯誤“不支持禁用...

我正在嘗試使用Spring-JDBC連接到Presto,并且我正在使用Hikari CP作為數據源.這是我的配置:Beanpublic DataSource myDataSource() {HikariDataSource hikariDataSource new HikariDataSource();hikariDataSource.setDriverClassName("com.facebook.presto.jd…

ni軟件管理器_NI 技術支持丨我的 NI 硬件設備不能被識別,怎么辦?Windows

這篇指南可以幫助您解決在您的 Windows 系統上無法識別您的 NI 硬件有關的問題。癥狀包括以下幾種情況:連接至 USB 端口時,硬件上的 LED 燈不亮/不閃爍。連接至 USB 后已連接設備的 LED 燈持續閃爍。僅限音頻接口:該設備在音頻應用程序或 Win…

環境搭建相關

1.檢測jre運行環境 java -version 沒有的話 按照提示安裝 default-jre 夠用 http://www.linuxidc.com/Linux/2016-11/136958.htm 否則按照上面處理 2.pycharm下載 https://www.jetbrains.com/pycharm/download/ 選擇下載一個linux的 3.下載crackjar http://idea.lanyus.com/jar…

在Java應用程序中使用密碼學

這篇文章描述了如何使用Java密碼體系結構 (JCA),該體系結構使您可以在應用程序中使用密碼服務。 Java密碼體系結構服務 JCA提供了許多加密服務,例如消息摘要和簽名 。 這些服務可以通過特定于服務的API來訪問,例如Me…

CSS學習筆記-04 a標簽-導航練習

個人練習&#xff0c;各位大神勿笑 。。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&qu…

AngularJs簡介

AngualrJs是一個javascript框架&#xff0c;它通過<script>標簽加到HTML頁面中。 Angular通過指令拓展了HTML&#xff0c;且通過表達式綁定數據到HTML。 Angular是一個javascript框架 Angular是一個javascript框架。它是一個以javascript編寫的庫。 Angular是以一個javas…

java怎樣訪問servlet_如何訪問URL并從java servlet獲取響應?

你需要做這樣的事情import java.io.*;import java.net.URL;import java.net.URLConnection;import javax.servlet.http.*;import javax.servlet.*;public class URLServlet extends HttpServlet {public void doGet(HttpServletRequest req, HttpServletResponse res)throws Se…

深度學習loss值變為0_利用TensorFlow2.0為膽固醇、血脂、血壓數據構建時序深度學習模型(python源代碼)...

背景數據描述膽固醇、高血脂、高血壓是壓在廣大中年男性頭上的三座大山&#xff0c;如何有效的監控他們&#xff0c;做到早發現、早預防、早治療尤為關鍵&#xff0c;趁著這個假期我就利用TF2.0構建了一套時序預測模型&#xff0c;一來是可以幫我預發疾病&#xff0c;二來也可以…

在Spring MVC Web應用程序中使用reCaptcha

CAPTCHA是一種程序&#xff0c;可以生成人類可以通過的測試并對其進行評分&#xff0c;而計算機程序“ 不能 ”通過。 所采取的策略之一是向用戶顯示具有扭曲文本的圖像&#xff0c;并且用戶應在輸入區域中書寫文本。 如果顯示的文字與用戶輸入的文字相同&#xff0c;則我們可以…

洛谷 P1757 通天之分組背包

P1757 通天之分組背包 題目背景 直達通天路小A歷險記第二篇 題目描述 自01背包問世之后&#xff0c;小A對此深感興趣。一天&#xff0c;小A去遠游&#xff0c;卻發現他的背包不同于01背包&#xff0c;他的物品大致可分為k組&#xff0c;每組中的物品相互沖突&#xff0c;現在&a…

課時109.外邊距合并現象(掌握)

我們先寫一個案例&#xff0c;通過案例來了解 它們之間的水平距離就是兩個間距的和 我們看完水平再來看垂直方向 在默認布局的垂直方向上&#xff0c;默認情況下外邊距是不會疊加的&#xff0c;會出現合并現象&#xff0c;誰的外邊距比較大就聽誰的 本文轉載于:猿2048?https:…

純 CSS實現三角形

最近項目上做評論回復&#xff0c;設計師提高交互性特意設計了小三角&#xff0c;如下&#xff1a; 下面介紹一下實現效果的css方法&#xff1a; 1.border 通過設置上下左右border寬度來實現。 首先查看一下全部設置的效果&#xff1a; <style>   .triangle{     w…

python access_Python3 os.access() 方法

Python3 os.access() 方法概述os.access() 方法使用當前的uid/gid嘗試訪問路徑。大部分操作使用有效的 uid/gid, 因此運行環境可以在 suid/sgid 環境嘗試。語法access()方法語法格式如下&#xff1a;os.access(path, mode);參數path -- 要用來檢測是否有訪問權限的路徑。mode -…

小米的java待遇怎么樣_【Java工資】小米2021年Java工資待遇-看準網

已經不是面試官遲到的問題了&#xff0c;是約好了面試時間&#xff0c;結果徹底沒有然后了&#xff0c;這種言而無信我頭一回見。小米運營部門令人困惑的工作作風&#xff0c;簡單總結一句就是&#xff1a;敷衍不走心&#xff0c;面試規則內部都不統一。兩次面小米&#xff0c;…

Spring MVC表單驗證(帶批注)

這篇文章提供了一個簡單HTML表單驗證示例。 它基于帶有注釋的Spring MVC示例。 該代碼可在GitHub的Spring-MVC-Form-Validation目錄中找到。 數據 在此示例中&#xff0c;我們將使用bean和JSR303驗證批注&#xff1a; public class MyUser {NotNullSize(min1,max20)private …

課時106.邊框練習(理解)

讓我們做出來如下的樣式&#xff1a; 1.首先看下有幾個邊框&#xff0c;就做幾個div&#xff0c;用簡單方法div.box$*6 tab鍵 2.然后給它們設置寬高 3.然后依此來做邊框 第一個&#xff1a;有四種方法&#xff0c;第一種最簡單 第二個&#xff1a;有兩種方法&#xff0c;第二…

Bzoj3998 弦論

物理題目傳送門 求第k大的子串&#xff1f;SAM模板題啊 CLJ的論文都講了怎么做啊&#xff0c;把自動機看成一個后綴Trie求出size讓后像多叉平衡樹那樣亂搞就好了~ 比前兩個哈希的題好多了~ &#xff08;順便&#xff0c;hdu高亮好好看啊&#xff09; #pragma GCC opitmize(&quo…

java需要先安裝jdk_謝謝知乎。Java初學者首先下載 JDK 開發環境,然后再下 eclipse 對嗎?那 tomcat是什么?還需要安裝嗎?...

程序獵人Till All are One!何馬、FAN 等人贊同這個問題&#xff0c;作為有些Java經驗的人&#xff0c;都會覺得太初級。而且&#xff0c;我認為可能很多真正的高手不屑于跑來回答這種問題。本來我也不打算回答的&#xff0c;但最近剛好憑興趣在學Node.JS&#xff0c;順便學習加…