您好,登錄后才能下訂單哦!
這篇文章主要介紹Python操作數據庫的案例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
一、Python數據庫API
Python 需要為操作不同的數據庫使用不同的模塊,但基本都遵守 Python 制訂的 DB API 協議,目前該協議的最新版本是 2.0。
使用 Python DB API 2.0 操作數據庫的基本流程如下
調用 connect() 方法打開數據庫連接,該方法返回數據庫連接對象。
通過數據庫連接對象打開游標。
使用游標執行 SQL 語句(包括 DDL、DML、select 查詢語句等)。如果執行的是查詢語句,則處理查詢數據。
關閉游標。
關閉數據庫連接。
使用 Python DB API 2.0 操作數據庫的基本流程如圖
數據庫 API 的核心類
遵守 DB API 2.0 協議的數據庫模塊通常會提供一個 connect() 函數,該函數用于連接數據庫,并返回數據庫連接對象。數據庫連接對象通常會具有如下方法和屬性:
cursor(factory=Cursor):打開游標。
commit():提交事務。
rollback():回滾事務。
close():關閉數據庫連接。
isolation_level:返回或設置數據庫連接中事務的隔離級別。
in_transaction:判斷當前是否處于事務中。
游標對象通常會具有如下方法和屬性:
execute(sql[, parameters]):執行 SQL 語句。parameters 參數用于為 SQL 語句中的參數指定值。
executemany(sql, seq_of_parameters):重復執行 SQL 語句。可以通過 seq_of_parameters 序列為 SQL 語句中的參數指定值,該序列有多少個元素,SQL 語句被執行多少次。
fetchone():獲取查詢結果集的下一行。如果沒有下一行,則返回 None。
fetchmany(size=cursor.arraysize):返回查詢結果集的下 N 行組成的列表。如果沒有更多的數據行,則返回空列表。
fetchall():返回查詢結果集的全部行組成的列表。
close():關閉游標。
rowcount:該只讀屬性返回受 SQL 語句影響的行數。對于 executemany() 方法,該方法所修改的記錄條數也可通過該屬性獲取。
lastrowid:該只讀屬性可獲取最后修改行的 rowid。
arraysize:用于設置或獲取 fetchmany() 默認獲取的記錄條數,該屬性默認為 1。有些數據庫模塊沒有該屬性。
description:該只讀屬性可獲取最后一次查詢返回的所有列的列名信息。
connection:該只讀屬性返回創建游標的數據庫連接對象。有些數據庫模塊沒有該屬性。
二、Python操作數據庫SQLite
SQLite是一種嵌入式數據庫,它的數據庫就是一個文件。
Python內置了SQLite3,在Python中使用SQLite,不需要安裝任何東西,直接使用。
# 導入訪問SQLite的模塊 import sqlite3 # ①、打開或創建數據庫 # 也可以使用特殊名::memory:代表創建內存中的數據庫 conn = sqlite3.connect('first.db') # ②、獲取游標 c = conn.cursor() # ③、執行DDL語句創建數據表 c.execute('''create table user_tb( _id integer primary key autoincrement, name text, pass text, gender text)''') # 執行DDL語句創建數據表 c.execute('''create table order_tb( _id integer primary key autoincrement, item_name text, item_price real, item_number real, user_id inteter, foreign key(user_id) references user_tb(_id) )''') # 執行DML的insert語句插入數據 c.execute('insert into user_tb values(null, ?, ?, ?)', ('孫悟空', '123456', 'male')) c.execute('insert into order_tb values(null, ?, ?, ?, ?)', ('鼠標', '34.2', '3', 1)) # SQLite 數據庫 API 默認是開啟了事務,需要提交事務 conn.commit() # 調用executemany()方法把同一條SQL語句執行多次 c.executemany('insert into user_tb values(null, ?, ?, ?)', (('sun', '123456', 'male'), ('bai', '123456', 'female'), ('zhu', '123456', 'male'), ('niu', '123456', 'male'), ('tang', '123456', 'male'))) # 通過rowcount獲取被修改的記錄條數 print('修改的記錄條數:', c.rowcount) conn.commit() # ④、關閉游標 c.close() # ⑤、關閉連接 conn.close()
三、Python操作數據庫MySQL
安裝MySQL驅動
由于MySQL服務器以獨立的進程運行,并通過網絡對外服務,所以需要支持Python的MySQL驅動來連接MySQL服務器。
MySQL官方提供了mysql-connector-python驅動,但是安裝的時候需要給pip命令加上參數--allow-external:
$ pip install mysql-connector-python --allow-external mysql-connector-python
我們演示如何連接到MySQL服務器的test數據庫:
# 導入訪問MySQL的模塊 import mysql.connector # ①、連接數據庫 conn = conn = mysql.connector.connect(user='root', password='123456', host='localhost', port='3306', database='python', use_unicode=True) # ②、獲取游標 c = conn.cursor() # ③、執行DDL語句創建數據表 c.execute('''create table user_tb( user_id int primary key auto_increment, name varchar(255), pass varchar(255), gender varchar(255))''') # 執行DDL語句創建數據表 c.execute('''create table order_tb( order_id integer primary key auto_increment, item_name varchar(255), item_price double, item_number double, user_id int, foreign key(user_id) references user_tb(user_id) )''') # 執行DML的insert語句插入數據 c.execute('insert into user_tb values(null, %s, %s, %s)', ('孫悟空', '123456', 'male')) c.execute('insert into order_tb values(null, %s, %s, %s, %s)', ('鼠標', '34.2', '3', 1)) # 調用executemany()方法把同一條SQL語句執行多次 c.executemany('insert into user_tb values(null, %s, %s, %s)', (('sun', '123456', 'male'), ('bai', '123456', 'female'), ('zhu', '123456', 'male'), ('niu', '123456', 'male'), ('tang', '123456', 'male'))) # 關閉事務支持conn.autocommit = True conn.commit() # ④、關閉游標 c.close() # ⑤、關閉連接 conn.close()
與連接 SQLite 相比,最大的區別在于第 5 行代碼,程序要連接 localhost 主機上 3306 端口服務的 python 數據庫。
與連接 SQLite 相比,MySQL 語句中的占位符:%s
MySQL 數據庫模塊的連接對象有一個 autoconunit 屬性,如果將該屬性設為 True,則意味著關閉該連接的事務支持,程序每次執行 DML 語句之后都會自動提交,這樣程序就無須調用連接對象的 commit() 方法來提交事務了。
以上是Python操作數據庫的案例分析的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。