本文實例講述了Python開發SQLite3數據庫相關操作。分享給大家供大家參考,具體如下:
'''SQLite數據庫是一款非常小巧的嵌入式開源數據庫軟件,也就是說沒有獨立的維護進程,所有的維護都來自于程序本身。在python中,使用sqlite3創建數據庫的連接,當我們指定的數據庫文件不存在的時候連接對象會自動創建數據庫文件;如果數據庫文件已經存在,則連接對象不會再創建數據庫文件,而是直接打開該數據庫文件。 連接對象可以是硬盤上面的數據庫文件,也可以是建立在內存中的,在內存中的數據庫 執行完任何操作后,都不需要提交事務的(commit) 創建在硬盤上面: conn = sqlite3.connect('c://test//test.db') 創建在內存上面: conn = sqlite3.connect('"memory:') 下面我們一硬盤上面創建數據庫文件為例來具體說明: conn = sqlite3.connect('c://test//hongten.db') 其中conn對象是數據庫鏈接對象,而對于數據庫鏈接對象來說,具有以下操作: commit() --事務提交 rollback() --事務回滾 close() --關閉一個數據庫鏈接 cursor() --創建一個游標 cu = conn.cursor() 這樣我們就創建了一個游標對象:cu 在sqlite3中,所有sql語句的執行都要在游標對象的參與下完成 對于游標對象cu,具有以下具體操作: execute() --執行一條sql語句 executemany() --執行多條sql語句 close() --游標關閉 fetchone() --從結果中取出一條記錄 fetchmany() --從結果中取出多條記錄 fetchall() --從結果中取出所有記錄 scroll() --游標滾動'''下面是我做的demo,在demo中,我做了很詳細的注釋和功能的演示,詳情如下:
當SHOW_SQL = False的時候:
Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32Type "copyright", "credits" or "license()" for more information.>>> ================================ RESTART ================================>>> show_sql : False刪除數據庫表測試...硬盤上面:[c:/test/hongten.db]刪除數據庫表[student]成功!創建數據庫表測試...硬盤上面:[c:/test/hongten.db]創建數據庫表[student]成功!保存數據測試...硬盤上面:[c:/test/hongten.db]查詢所有數據...硬盤上面:[c:/test/hongten.db](1, 'Hongten', '男', 20, '廣東省廣州市', '13423****62')(2, 'Tom', '男', 22, '美國舊金山', '15423****63')(3, 'Jake', '女', 18, '廣東省廣州市', '18823****87')(4, 'Cate', '女', 21, '廣東省廣州市', '14323****32')##################################################查詢一條數據...硬盤上面:[c:/test/hongten.db](1, 'Hongten', '男', 20, '廣東省廣州市', '13423****62')##################################################更新數據...硬盤上面:[c:/test/hongten.db]查詢所有數據...硬盤上面:[c:/test/hongten.db](1, 'HongtenAA', '男', 20, '廣東省廣州市', '13423****62')(2, 'HongtenBB', '男', 22, '美國舊金山', '15423****63')(3, 'HongtenCC', '女', 18, '廣東省廣州市', '18823****87')(4, 'HongtenDD', '女', 21, '廣東省廣州市', '14323****32')##################################################刪除數據...硬盤上面:[c:/test/hongten.db]查詢所有數據...硬盤上面:[c:/test/hongten.db](2, 'HongtenBB', '男', 22, '美國舊金山', '15423****63')(4, 'HongtenDD', '女', 21, '廣東省廣州市', '14323****32')>>>
當SHOW_SQL = True的時候:
Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32Type "copyright", "credits" or "license()" for more information.>>> ================================ RESTART ================================>>> show_sql : True刪除數據庫表測試...硬盤上面:[c:/test/hongten.db]執行sql:[DROP TABLE IF EXISTS student]刪除數據庫表[student]成功!創建數據庫表測試...硬盤上面:[c:/test/hongten.db]執行sql:[CREATE TABLE `student` ( `id` int(11) NOT NULL, `name` varchar(20) NOT NULL, `gender` varchar(4) DEFAULT NULL, `age` int(11) DEFAULT NULL, `address` varchar(200) DEFAULT NULL, `phone` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) )]創建數據庫表[student]成功!保存數據測試...硬盤上面:[c:/test/hongten.db]執行sql:[INSERT INTO student values (?, ?, ?, ?, ?, ?)],參數:[(1, 'Hongten', '男', 20, '廣東省廣州市', '13423****62')]執行sql:[INSERT INTO student values (?, ?, ?, ?, ?, ?)],參數:[(2, 'Tom', '男', 22, '美國舊金山', '15423****63')]執行sql:[INSERT INTO student values (?, ?, ?, ?, ?, ?)],參數:[(3, 'Jake', '女', 18, '廣東省廣州市', '18823****87')]執行sql:[INSERT INTO student values (?, ?, ?, ?, ?, ?)],參數:[(4, 'Cate', '女', 21, '廣東省廣州市', '14323****32')]查詢所有數據...硬盤上面:[c:/test/hongten.db]執行sql:[SELECT * FROM student](1, 'Hongten', '男', 20, '廣東省廣州市', '13423****62')(2, 'Tom', '男', 22, '美國舊金山', '15423****63')(3, 'Jake', '女', 18, '廣東省廣州市', '18823****87')(4, 'Cate', '女', 21, '廣東省廣州市', '14323****32')##################################################查詢一條數據...硬盤上面:[c:/test/hongten.db]執行sql:[SELECT * FROM student WHERE ID = ? ],參數:[1](1, 'Hongten', '男', 20, '廣東省廣州市', '13423****62')##################################################更新數據...硬盤上面:[c:/test/hongten.db]執行sql:[UPDATE student SET name = ? WHERE ID = ? ],參數:[('HongtenAA', 1)]執行sql:[UPDATE student SET name = ? WHERE ID = ? ],參數:[('HongtenBB', 2)]執行sql:[UPDATE student SET name = ? WHERE ID = ? ],參數:[('HongtenCC', 3)]執行sql:[UPDATE student SET name = ? WHERE ID = ? ],參數:[('HongtenDD', 4)]查詢所有數據...硬盤上面:[c:/test/hongten.db]執行sql:[SELECT * FROM student](1, 'HongtenAA', '男', 20, '廣東省廣州市', '13423****62')(2, 'HongtenBB', '男', 22, '美國舊金山', '15423****63')(3, 'HongtenCC', '女', 18, '廣東省廣州市', '18823****87')(4, 'HongtenDD', '女', 21, '廣東省廣州市', '14323****32')##################################################刪除數據...硬盤上面:[c:/test/hongten.db]執行sql:[DELETE FROM student WHERE NAME = ? AND ID = ? ],參數:[('HongtenAA', 1)]執行sql:[DELETE FROM student WHERE NAME = ? AND ID = ? ],參數:[('HongtenCC', 3)]查詢所有數據...硬盤上面:[c:/test/hongten.db]執行sql:[SELECT * FROM student](2, 'HongtenBB', '男', 22, '美國舊金山', '15423****63')(4, 'HongtenDD', '女', 21, '廣東省廣州市', '14323****32')>>> 具體代碼:
#python sqlite#Author : Hongten#Create : 2013-08-09#Version: 1.0#DB-API 2.0 interface for SQLite databasesimport sqlite3import os'''SQLite數據庫是一款非常小巧的嵌入式開源數據庫軟件,也就是說沒有獨立的維護進程,所有的維護都來自于程序本身。在python中,使用sqlite3創建數據庫的連接,當我們指定的數據庫文件不存在的時候連接對象會自動創建數據庫文件;如果數據庫文件已經存在,則連接對象不會再創建數據庫文件,而是直接打開該數據庫文件。 連接對象可以是硬盤上面的數據庫文件,也可以是建立在內存中的,在內存中的數據庫 執行完任何操作后,都不需要提交事務的(commit) 創建在硬盤上面: conn = sqlite3.connect('c://test//test.db') 創建在內存上面: conn = sqlite3.connect('"memory:') 下面我們一硬盤上面創建數據庫文件為例來具體說明: conn = sqlite3.connect('c://test//hongten.db') 其中conn對象是數據庫鏈接對象,而對于數據庫鏈接對象來說,具有以下操作: commit() --事務提交 rollback() --事務回滾 close() --關閉一個數據庫鏈接 cursor() --創建一個游標 cu = conn.cursor() 這樣我們就創建了一個游標對象:cu 在sqlite3中,所有sql語句的執行都要在游標對象的參與下完成 對于游標對象cu,具有以下具體操作: execute() --執行一條sql語句 executemany() --執行多條sql語句 close() --游標關閉 fetchone() --從結果中取出一條記錄 fetchmany() --從結果中取出多條記錄 fetchall() --從結果中取出所有記錄 scroll() --游標滾動'''#global var#數據庫文件絕句路徑DB_FILE_PATH = ''#表名稱TABLE_NAME = ''#是否打印sqlSHOW_SQL = Truedef get_conn(path): '''獲取到數據庫的連接對象,參數為數據庫文件的絕對路徑 如果傳遞的參數是存在,并且是文件,那么就返回硬盤上面改 路徑下的數據庫文件的連接對象;否則,返回內存中的數據接 連接對象''' conn = sqlite3.connect(path) if os.path.exists(path) and os.path.isfile(path): print('硬盤上面:[{}]'.format(path)) return conn else: conn = None print('內存上面:[:memory:]') return sqlite3.connect(':memory:')def get_cursor(conn): '''該方法是獲取數據庫的游標對象,參數為數據庫的連接對象 如果數據庫的連接對象不為None,則返回數據庫連接對象所創 建的游標對象;否則返回一個游標對象,該對象是內存中數據 庫連接對象所創建的游標對象''' if conn is not None: return conn.cursor() else: return get_conn('').cursor()################################################################### 創建|刪除表操作 START###############################################################def drop_table(conn, table): '''如果表存在,則刪除表,如果表中存在數據的時候,使用該 方法的時候要慎用!''' if table is not None and table != '': sql = 'DROP TABLE IF EXISTS ' + table if SHOW_SQL: print('執行sql:[{}]'.format(sql)) cu = get_cursor(conn) cu.execute(sql) conn.commit() print('刪除數據庫表[{}]成功!'.format(table)) close_all(conn, cu) else: print('the [{}] is empty or equal None!'.format(sql))def create_table(conn, sql): '''創建數據庫表:student''' if sql is not None and sql != '': cu = get_cursor(conn) if SHOW_SQL: print('執行sql:[{}]'.format(sql)) cu.execute(sql) conn.commit() print('創建數據庫表[student]成功!') close_all(conn, cu) else: print('the [{}] is empty or equal None!'.format(sql))################################################################### 創建|刪除表操作 END###############################################################def close_all(conn, cu): '''關閉數據庫游標對象和數據庫連接對象''' try: if cu is not None: cu.close() finally: if cu is not None: cu.close()################################################################### 數據庫操作CRUD START###############################################################def save(conn, sql, data): '''插入數據''' if sql is not None and sql != '': if data is not None: cu = get_cursor(conn) for d in data: if SHOW_SQL: print('執行sql:[{}],參數:[{}]'.format(sql, d)) cu.execute(sql, d) conn.commit() close_all(conn, cu) else: print('the [{}] is empty or equal None!'.format(sql))def fetchall(conn, sql): '''查詢所有數據''' if sql is not None and sql != '': cu = get_cursor(conn) if SHOW_SQL: print('執行sql:[{}]'.format(sql)) cu.execute(sql) r = cu.fetchall() if len(r) > 0: for e in range(len(r)): print(r[e]) else: print('the [{}] is empty or equal None!'.format(sql)) def fetchone(conn, sql, data): '''查詢一條數據''' if sql is not None and sql != '': if data is not None: #Do this instead d = (data,) cu = get_cursor(conn) if SHOW_SQL: print('執行sql:[{}],參數:[{}]'.format(sql, data)) cu.execute(sql, d) r = cu.fetchall() if len(r) > 0: for e in range(len(r)): print(r[e]) else: print('the [{}] equal None!'.format(data)) else: print('the [{}] is empty or equal None!'.format(sql))def update(conn, sql, data): '''更新數據''' if sql is not None and sql != '': if data is not None: cu = get_cursor(conn) for d in data: if SHOW_SQL: print('執行sql:[{}],參數:[{}]'.format(sql, d)) cu.execute(sql, d) conn.commit() close_all(conn, cu) else: print('the [{}] is empty or equal None!'.format(sql))def delete(conn, sql, data): '''刪除數據''' if sql is not None and sql != '': if data is not None: cu = get_cursor(conn) for d in data: if SHOW_SQL: print('執行sql:[{}],參數:[{}]'.format(sql, d)) cu.execute(sql, d) conn.commit() close_all(conn, cu) else: print('the [{}] is empty or equal None!'.format(sql))################################################################### 數據庫操作CRUD END################################################################################################################################## 測試操作 START###############################################################def drop_table_test(): '''刪除數據庫表測試''' print('刪除數據庫表測試...') conn = get_conn(DB_FILE_PATH) drop_table(conn, TABLE_NAME)def create_table_test(): '''創建數據庫表測試''' print('創建數據庫表測試...') create_table_sql = '''CREATE TABLE `student` ( `id` int(11) NOT NULL, `name` varchar(20) NOT NULL, `gender` varchar(4) DEFAULT NULL, `age` int(11) DEFAULT NULL, `address` varchar(200) DEFAULT NULL, `phone` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) )''' conn = get_conn(DB_FILE_PATH) create_table(conn, create_table_sql)def save_test(): '''保存數據測試...''' print('保存數據測試...') save_sql = '''INSERT INTO student values (?, ?, ?, ?, ?, ?)''' data = [(1, 'Hongten', '男', 20, '廣東省廣州市', '13423****62'), (2, 'Tom', '男', 22, '美國舊金山', '15423****63'), (3, 'Jake', '女', 18, '廣東省廣州市', '18823****87'), (4, 'Cate', '女', 21, '廣東省廣州市', '14323****32')] conn = get_conn(DB_FILE_PATH) save(conn, save_sql, data)def fetchall_test(): '''查詢所有數據...''' print('查詢所有數據...') fetchall_sql = '''SELECT * FROM student''' conn = get_conn(DB_FILE_PATH) fetchall(conn, fetchall_sql)def fetchone_test(): '''查詢一條數據...''' print('查詢一條數據...') fetchone_sql = 'SELECT * FROM student WHERE ID = ? ' data = 1 conn = get_conn(DB_FILE_PATH) fetchone(conn, fetchone_sql, data)def update_test(): '''更新數據...''' print('更新數據...') update_sql = 'UPDATE student SET name = ? WHERE ID = ? ' data = [('HongtenAA', 1), ('HongtenBB', 2), ('HongtenCC', 3), ('HongtenDD', 4)] conn = get_conn(DB_FILE_PATH) update(conn, update_sql, data)def delete_test(): '''刪除數據...''' print('刪除數據...') delete_sql = 'DELETE FROM student WHERE NAME = ? AND ID = ? ' data = [('HongtenAA', 1), ('HongtenCC', 3)] conn = get_conn(DB_FILE_PATH) delete(conn, delete_sql, data)################################################################### 測試操作 END###############################################################def init(): '''初始化方法''' #數據庫文件絕句路徑 global DB_FILE_PATH DB_FILE_PATH = 'c://test//hongten.db' #數據庫表名稱 global TABLE_NAME TABLE_NAME = 'student' #是否打印sql global SHOW_SQL SHOW_SQL = True print('show_sql : {}'.format(SHOW_SQL)) #如果存在數據庫表,則刪除表 drop_table_test() #創建數據庫表student create_table_test() #向數據庫表中插入數據 save_test()def main(): init() fetchall_test() print('#' * 50) fetchone_test() print('#' * 50) update_test() fetchall_test() print('#' * 50) delete_test() fetchall_test()if __name__ == '__main__': main()
希望本文所述對大家Python程序設計有所幫助。
新聞熱點
疑難解答