目錄
- 一、數據庫操作
- 1.1 安裝PyMySQL
- 1.2 連接數據庫
- 1.3 創建數據表
- 1.4 插入,查詢數據
- 1.5 更新,查詢數據
- 1.6 刪除,查詢數據
- 二、連接與游標對象的方法
- 三、事務
一、數據庫操作
1.1 安裝PyMySQL
1.2 連接數據庫
python連接test
數據庫
import pymysql
host = 'localhost' # 主機地址
username = 'root' # 數據庫用戶名
password = '' # 數據庫密碼
db_name = 'test' # 數據庫名稱
# 創建connect對象
connect = pymysql.connect(host=host, user=username, password=password, database=db_name)
# 獲取游標對象
cursor = connect.cursor()
# 查詢數據庫版本
cursor.execute('SELECT VERSION()')
# 從查詢結果集中獲取下一行數據,返回值為一個值的序列
result = cursor.fetchone()
# 打印結果
print(result)
# 關閉游標
cursor.close()
# 關閉數據庫連接
connect.close()
執行結果:
('10.4.17-MariaDB',)
1.3 創建數據表
創建一個默認編碼格式為utf8的數據表users
id
:int類型,不能為空,有自增屬性,主鍵約束
name
:varchar類型,長度最多為10字符,可以為空
age
:int類型,可以為空
import pprint
import pymysql
host = 'localhost' # 主機地址
username = 'root' # 數據庫用戶名
password = '' # 數據庫密碼
db_name = 'test' # 數據庫名稱
# 創建connect對象
connect = pymysql.connect(host=host, user=username, password=password, database=db_name)
# 獲取游標對象
cursor = connect.cursor()
# 創建數據表的SQL命令
create_sql = '''
CREATE TABLE `users`(
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(10) NULL,
`age` INT NULL,
PRIMARY KEY (`id`))
DEFAULT CHARACTER SET = utf8;
'''
# 創建數據表
cursor.execute(create_sql)
# 查詢我們創建的數據表的結構
cursor.execute('DESC users')
# 從查詢結果中獲取結果的所有(或者剩余)行數據,返回值為包含序列的序列(例如元組序列)
result = cursor.fetchall()
# 打印結果
pprint.pprint(result)
# 關閉游標
cursor.close()
# 關閉數據庫連接
connect.close()
執行結果:
(('id', 'int(11)', 'NO', 'PRI', None, 'auto_increment'),
('name', 'varchar(10)', 'YES', '', None, ''),
('age', 'int(11)', 'YES', '', None, ''))

1.4 插入,查詢數據
插入3行數據:
id:1,name:路飛,age:18
id:2,name:娜美,age:19
id:3,name:索隆,age:20
import pprint
import pymysql
host = 'localhost' # 主機地址
username = 'root' # 數據庫用戶名
password = '' # 數據庫密碼
db_name = 'test' # 數據庫名稱
# 創建connect對象,插入中文時需要指定編碼格式
connect = pymysql.connect(host=host, user=username, password=password, database=db_name, charset='utf8')
# 獲取游標對象查詢返回字典
cursor = connect.cursor(pymysql.cursors.DictCursor)
# 插入數據的SQL命令
insert_sql = '''
INSERT INTO users (id, name, age)
VALUES (1, '路飛', 18),(2, '娜美', 19),(3, '索隆', 20)
'''
try:
# 插入數據到數據表
cursor.execute(insert_sql)
# 提交任何掛起的事務到數據庫
connect.commit()
except Exception as e:
# 發送數據回滾,回滾到事務開始時的狀態
connect.rollback()
# 查詢數據
cursor.execute('SELECT * FROM users')
# 只返回一行數據
# result_one = cursor.fetchone()
# print('---fetchone---')
# pprint.pprint(result_one)
# 返回全部數據
result_all = cursor.fetchall()
print('---fetchall---')
pprint.pprint(result_all)
# 關閉游標
cursor.close()
# 關閉數據庫連接
connect.close()
執行結果:
---fetchall---
[{'age': 18, 'id': 1, 'name': '路飛'},
{'age': 19, 'id': 2, 'name': '娜美'},
{'age': 20, 'id': 3, 'name': '索隆'}]

1.5 更新,查詢數據
更新數據id:3,name:山治,age:21
import pprint
import pymysql
host = 'localhost' # 主機地址
username = 'root' # 數據庫用戶名
password = '' # 數據庫密碼
db_name = 'test' # 數據庫名稱
# 創建connect對象,插入中文時需要指定編碼格式
connect = pymysql.connect(host=host, user=username, password=password, database=db_name, charset='utf8')
# 獲取游標對象查詢返回字典
cursor = connect.cursor(pymysql.cursors.DictCursor)
# 查詢數據
cursor.execute('SELECT * FROM users')
# 返回更新前全部數據
result_all = cursor.fetchall()
print('---更新前---')
pprint.pprint(result_all)
# 更新數據的SQL命令
update_sql = '''
UPDATE users SET name = '山治',age = 21 WHERE id = 3
'''
try:
# 更新數據到數據表
cursor.execute(update_sql)
# 提交任何掛起的事務到數據庫
connect.commit()
except Exception as e:
# 發送數據回滾,回滾到事務開始時的狀態
connect.rollback()
# 查詢數據
cursor.execute('SELECT * FROM users')
# 返回更新后全部數據
result_all = cursor.fetchall()
print('---更新后---')
pprint.pprint(result_all)
# 關閉游標
cursor.close()
# 關閉數據庫連接
connect.close()
執行結果:
---更新前---
[{'age': 18, 'id': 1, 'name': '路飛'},
{'age': 19, 'id': 2, 'name': '娜美'},
{'age': 20, 'id': 3, 'name': '索隆'}]
---更新后---
[{'age': 18, 'id': 1, 'name': '路飛'},
{'age': 19, 'id': 2, 'name': '娜美'},
{'age': 21, 'id': 3, 'name': '山治'}]

1.6 刪除,查詢數據
刪除'age': 19, 'id': 2, 'name': '娜美'
該行數據
import pprint
import pymysql
host = 'localhost' # 主機地址
username = 'root' # 數據庫用戶名
password = '' # 數據庫密碼
db_name = 'test' # 數據庫名稱
# 創建connect對象,插入中文時需要指定編碼格式
connect = pymysql.connect(host=host, user=username, password=password, database=db_name, charset='utf8')
# 獲取游標對象查詢返回字典
cursor = connect.cursor(pymysql.cursors.DictCursor)
# 查詢數據
cursor.execute('SELECT * FROM users')
# 返回刪除前全部數據
result_all = cursor.fetchall()
print('---刪除前---')
pprint.pprint(result_all)
# 刪除數據的SQL命令
update_sql = '''
DELETE FROM users WHERE id = 2
'''
try:
# 刪除數據表的數據
cursor.execute(update_sql)
# 提交任何掛起的事務到數據庫
connect.commit()
except Exception as e:
# 發送數據回滾,回滾到事務開始時的狀態
connect.rollback()
# 查詢數據
cursor.execute('SELECT * FROM users')
# 返回刪除后全部數據
result_all = cursor.fetchall()
print('---刪除后---')
pprint.pprint(result_all)
# 關閉游標
cursor.close()
# 關閉數據庫連接
connect.close()
執行結果:
---刪除前---
[{'age': 18, 'id': 1, 'name': '路飛'},
{'age': 19, 'id': 2, 'name': '娜美'},
{'age': 21, 'id': 3, 'name': '山治'}]
---刪除后---
[{'age': 18, 'id': 1, 'name': '路飛'}, {'age': 21, 'id': 3, 'name': '山治'}]

二、連接與游標對象的方法
2.1 連接對象的方法
馬上關閉數據連接(而不是當__del__
方法被調用的時候)。此后連接變得不可用,再次訪問本連接對象會觸發一個錯誤,使用本連接對象的游標對象,也會導致例外發生。在關閉連接對象之前,沒有提交(commit
)對數據庫的改變將會導致一個隱含的回滾動作(rollback
),這將丟棄之前的數據改變操作。
提交任何掛起的事務到數據庫中。
對于支持事務的數據庫。調用此方法將導致數據庫回滾到事務開始時的狀態。
方法返回給定連接上建立的游標對象(Cursor Object),如果數據庫沒有提供對應的游標對象,那么有程序來模擬實現游標功能。
2.2 游標對象的方法
立即關閉游標(不論__del__
方法是否已被調用),此后游標對象就變得不可用了。
.execute(operation[,parameters])
方法:
準備和執行數據庫操作。所提供的參數將會被綁定到語句中的變量,變量的定義和數據庫模塊有關。
.executemany(operation,seq_of_parameters)
方法:
準備和執行數據庫操作,然后以序列形式的函數來執行該操作。
從查詢結果中獲取下一行數據,返回值為一個值的序列,如果沒有更多數據則返回None。
.fetchmany([size=cursor.arraysize])
方法:
從查詢結果中獲取下一組行數據,返回值為包含序列的序列,如果沒有數據返回時,則返回空序列。每次調用要獲取的行數由參數指定,如果沒有指定行數,則游標的arraysize屬性決定要獲取的行數。
從查詢結果中獲取所有(或者剩余)行數據,返回值為包含序列的序列。
此方法將游標跳到下一個可用的結果集并丟棄當前結果集的所有行,如果沒有更有查詢結果集則返回None,否則返回True,接下來的fetch操作將會從新結果集返回數據了。
此方法可用在調用.execute
系列方法之前使用,用于預定義內存區域。size參數接收一個序列類型的值,每一個元素對應一個輸入參數,該元素應該是一個類型對象,對于將要使用的參數,或者是一個整數,用于指定字符串的最大長度。如果元素是None,則沒有預定義的內存區域作為保留區域。
.setoutputsize(size[,column])
方法:
為一個很大的列設置緩沖區大小,不指定將使用默認大小。
三、事務
事務是數據庫管理系統執行過程中的一個邏輯單位,由一個有限的數據庫操作序列構成,事務的目的性是為了保證數據的一致性。假設銀行轉賬操作,從A賬戶轉賬100元到B賬戶需要進行至少兩次的數據庫修改操作,A賬戶余額需要減少100元,B賬戶余額需要增加100元,如果因為由于外部原因導致程序意外終止,就會操作數據出錯,事務就是防止此情況的發生。
數據庫事務擁有四個特性,習慣稱之為ACID特性:
1、原子性(Atomicity):事務作為一個整體被執行,包含在其中的對數據庫的操作要么全部被執行,要么不執行。
2、一致性(Consistency):事務應確保數據庫的狀態從一個一致狀態轉變為另一個一致狀態,一致狀態的含義是數據庫中的數據應滿足完整性約束。
3、隔離性(Isolation):多個事務并發執行時,一個事務的執行不應影響其他事務的執行。
4、持久性(Durability):已被提交的事務對數據庫的修改應該永久保存在數據庫中。
import pprint
import pymysql
host = 'localhost' # 主機地址
username = 'root' # 數據庫用戶名
password = '' # 數據庫密碼
db_name = 'test' # 數據庫名稱
# 創建connect對象,插入中文時需要指定編碼格式
connect = pymysql.connect(host=host, user=username, password=password, database=db_name, charset='utf8')
# 獲取游標對象查詢返回字典
cursor = connect.cursor(pymysql.cursors.DictCursor)
# 正確的插入數據的SQL命令
insert_sql1 = '''
INSERT INTO users (name, age)
VALUES ('羅賓', 18),('喬巴', 16)
'''
# 錯誤的插入數據的SQL命令
insert_sql2 = '''
INSERT INTO users (name, age)
VALUES ('弗蘭奇')
'''
try:
# 插入數據到數據表
cursor.execute(insert_sql1)
cursor.execute(insert_sql2)
# 提交任何掛起的事務到數據庫
connect.commit()
except Exception as e:
# 執行失敗發送數據回滾,回滾到事務開始時的狀態
connect.rollback()
# 查詢數據
cursor.execute('SELECT * FROM users')
# 返回全部數據
result_all = cursor.fetchall()
print('---fetchall---')
pprint.pprint(result_all)
# 關閉游標
cursor.close()
# 關閉數據庫連接
connect.close()
上例中執行了兩條SQL語句,一條正確的一條錯誤的,只要有一個錯誤,兩條都不會生效,rollback方法會回滾當前游標的所有操作。
到此這篇關于Python基礎之操作MySQL數據庫的文章就介紹到這了,更多相關Python操作MySQL內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- MYSQL數據庫基礎之Join操作原理
- MySQL系列之開篇 MySQL關系型數據庫基礎概念
- Mysql數據庫索引面試題(程序員基礎技能)
- MySql數據庫基礎知識點總結
- 一篇文章帶你了解MySQL數據庫基礎