Python學習筆記:sqlite3(sqlite數據庫操做)

對於數據庫的操做,Python中能夠經過下載一些對應的三方插件和對應的數據庫來實現數據庫的操做,可是這樣難免使得Python程序變得更加複雜了。若是隻是想要使用數據庫,又不想下載一些沒必要要的插件和輔助軟件,可使用Python內置模塊sqlite3。html

sqlite3是Python對於sqlite數據庫的支持,模塊名稱之因此是sqlite3而不是sqlite,是由於sqlite的版本中最流行的就是3.x的版本。sql

sqlite數據庫教程:http://www.runoob.com/sqlite/sqlite-intro.html數據庫

sqlite GUI軟件SQLiteSpy:https://www.yunqa.de/delphi/products/sqlitespy/index,數據庫的可視化管理工具備不少,你也能夠選擇其餘的軟件,可是SQLiteSpy這個軟件免費並且很是小,對於日常的sqlite數據庫操做其實已經能夠知足了。工具

 

經常使用API(方括號中爲可選參數)fetch

  • conn = sqlite3.connect(database[, optional_params]):鏈接(磁盤上的)數據庫database,database是一個數據庫文件,能夠是相對路徑,也能夠是絕對路徑,若是這個文件存在且鏈接成功則返回一個鏈接對象;若是文件不存在,則自動建立一個數據庫文件。
  • csr = conn.cursor([optional_params]):獲取去鏈接對象的遊標對象,遊標能夠理解爲存放SQL結果的緩衝區,也能夠理解爲指向SQL結果的光標。
  • csr.execute(sql[, optional_params]):執行SQL語句,返回值也是一個cursor遊標對象。SQL語句可使用問號「?」做爲佔位符,例如:csr.execute('INSERT INTO STUDENTS VALUES(?, ?, ?)', (1, 'Jason', 18)) ,其中表students有三個字段ID、NAME和AGE。
  • csr.executemany(sql, seq_of_parameters):對seq_of_parameters中的全部數據執行同一個sql。例如須要向數據庫中插入大量數據時,sql中可使用佔位符,要插入的數據放入seq_of_parameters中。
  • conn.commit():提交事務。若是以前對數據庫進行了修改,好比插入操做,就須要先commit()。
  • conn.close():關閉數據庫鏈接。關閉數據庫鏈接以前,若是對數據庫進行了修改,就須要先commit,關閉的時候不會自動commit的,若是沒有commit,那麼全部的修改都會被丟失。
  • csr.fetchone():獲取查詢結果集中的下一行,返回的是一個表示一行數據的元組,若是沒有數據則返回None。
  • csr.fetchmany(size):獲取查詢結果集中的指定大小的下一組數據,默認返回一行數據(不一樣與fetchone,返回的是列表,而列表中只有一個元組),若是沒有數據則返回空列表。
  • csr.fetchall():返回查詢結果集中的所有數據。

簡單示例:spa

# -*- coding:utf-8 -*-
import sqlite3

# 數據庫文件
db = 'sqlite_test.db'

# 鏈接數據庫,若是沒有則建立數據庫
conn = sqlite3.connect(db)

# 獲取遊標
csr = conn.cursor()

# 建立表STUDENTS
csr.execute('CREATE TABLE STUDENTS'
            '(ID INT PRIMARY KEY NOT NULL,'
            'NAME TEXT NOT NULL,'
            'AGE INT NOT NULL);')

# 插入一條數據
csr.execute('INSERT INTO STUDENTS VALUES(1, "Jason", 18)')

# 插入語句sql,並使用佔位符
insert_sql = 'INSERT INTO STUDENTS VALUES(?, ?, ?)'

# 須要批量插入的數據
students_info = [(2, 'Mickle', 20),
                 (3, 'Mary', 30),
                 (4, 'Bob', 40)]

# 批量插入數據
csr.executemany(insert_sql, students_info)

# 提交事務
conn.commit()

# 獲取一行數據
# datas = csr.execute('SELECT * FROM STUDENTS;').fetchone()

# 獲取2行數據
# datas = csr.execute('SELECT * FROM STUDENTS;').fetchmany(2)

# 獲取所有數據
# datas = csr.execute('SELECT * FROM STUDENTS;').fetchall()

# 關閉數據庫鏈接
conn.close()

 

經常使用SQL插件

sqlite的更多知識能夠參考筆記開始的sqlite教程。code

查詢數據庫中的表:sqlite

SELECT name FROM sqlite_master WHERE type='table';htm

查詢表中的字段信息:

PRAGMA TABLE_INFO([table_name]);

 使用分享:

一、SQL中的表名或者字段名帶有特殊符號時應該使用嵌套引號括起來,這些特殊符號多是語法的一部分,應該使用嵌套引號表名它是一個總體,特別是使用格式化字符串時別忘了使用引號嵌套。如包含點號:'SELECT "aa.bb" FROM xxx;'或者'SELECT xxx FROM "%s";' % 'ccc.ddd.eee'

相關文章
相關標籤/搜索