python mysqldb_python学习-使用MySQLdb操作mysql数据库
操作環境為python2.7 centos7
一、MySQLdb的安裝與配置
MySQLdb是用于Python連接mysql數據庫的接口,它實現了Python數據庫api規范2.0。
按照以下方式安裝yum?install?epel-release
yum?install?python-pip
yum?install?python-devel
yum?install?mysql-devel
pip?install?MySQL-python
安裝完模塊后,使用時導入模塊名即可import?MySQLdb
二、數據庫準備
創建一個數據庫為了準備研究使用
1、創建數據庫TESTDB
2、在TESTDB數據庫中創建表EMPLOYEE
3、EMPLOYEE表字段為ID,FIRST_NAME,LAST_NAME,AGE,SEX
4、連接數據TESTDB使用用用戶名為"testuser",密碼“test123"
創建完數據表配置命令如下ctreate?database?TESTDB?charset?utf8;
use??TESTDB;
create?table?EMPLOYEE(
ID?int?primary?key?auto_increment,
FIRST_NAME?varchar(10)?not?null,
LAST_NAME?varchar(10)?not?null,
AGE?int?not?null,
SEX?varchar(10)?not?null
);
desc?EMPLOYEE;
創建數據庫用戶create?user?'testuser'@'localhost'?identified?by?'test123';#創建用戶
grant?all?privileges?on?TESTDB.*?to?'testuser'@'%'?identified?by?'test123'?with?grant?option;#指定用戶testuser可以從任何位置訪問TESTDB數據下的任何表,擁有全部權限
flush?privileges;
revoke?drop?on?*.*?from?'testuser'@'%';?#移除用戶testuser從任何位置刪除權限
flush?privileges;
驗證是否能偶遠程登陸
至此,數據庫準備完畢
三、MySQLdb基本方法
3.1connect函數
host:數據庫服務的地址,默認通過UNINX socket訪問本地數據庫;
user:登陸數據庫的用戶名
passwd 登陸數據的密碼
db 創建數據庫連接以后選擇的數據庫
port 連接數據庫連接的端口號 ,默認3306
unix_socket:UNIX socket的路徑
connect_timeout:連接超時時間
read_default_file 讀取Mysql的配置文件中的配置進行連接
3.2Conection類的成員
通過正確的參數調用MySQLdb的connect函數,將會返回Connection類的對象。常用方法如下:
begin:開始事務
commit:提交事務
rollback:回滾事務
cursor:返回一個cursor對象
autocommint:設置事務是否自動提交
set_character_set:設置字符集編碼;
get_server_info:獲取數據庫版本信息
3.3cusor類成員
cursor對象表示數據庫游標,用于執行sql語句并獲取sql語句的執行結果。常用方法如下
execute:執行語句
close 關閉游標
fetchall:獲取sql語句的所有記錄
fetchmany :獲取sql語句的多條記錄
fetchone:獲取sql語句的一條記錄
owncount:常量,表示sql語句的結果集中返回了多少條記錄
arraysize:變量,保存了當前獲取記錄的下標
四、連接數據庫基本操作
4.1數據庫連接import?MySQLdb
#?打開數據庫連接
db?=?MySQLdb.connect('localhost','testuser','test123','TESTDB',charset='utf8')
#?使用cursor()方法獲取操作游標
cursor?=?db.cursor()
#?使用execute方法執行SQL語句
cursor.execute('SELECT?VERSION()')
#?使用?fetchone()?方法獲取一條數據
data?=?cursor.fetchone()
print?"Database?version?:?%s?"?%?data
#?關閉數據庫連接db.close()
db.close()
執行完以上語句后,輸出結果如下
4.2創建數據庫表EMPLOYEE_1
#!/usr/bin/python
#?-*-?coding:?UTF-8?-*-
import?MySQLdb
#?打開數據庫連接
db?=?MySQLdb.connect("localhost",?"testuser",?"test123",?"TESTDB",?charset='utf8'?)
#?使用cursor()方法獲取操作游標
cursor?=?db.cursor()
#?如果數據表已經存在使用?execute()?方法刪除表。
#cursor.execute("DROP?TABLE?IF?EXISTS?EMPLOYEE_1")
#?創建數據表SQL語句
sql?=?"""CREATE?TABLE?EMPLOYEE_1?(
FIRST_NAME??CHAR(20)?NOT?NULL,
LAST_NAME??CHAR(20),
AGE?INT,
SEX?CHAR(1),
INCOME?FLOAT?)"""
cursor.execute(sql)
#?關閉數據庫連接
db.close()
此時查看表已經被創建
4.3數據庫插入操作
以下為使用sql insert語句向表EMPLOYEE_1插入記錄:
#!/usr/bin/python
#?-*-?coding:?UTF-8?-*-
import?MySQLdb
#?打開數據庫連接
db?=?MySQLdb.connect("localhost",?"testuser",?"test123",?"TESTDB",?charset='utf8'?)
#?使用cursor()方法獲取操作游標
cursor?=?db.cursor()
#?SQL?插入語句
sql?=?"INSERT?INTO?EMPLOYEE_1(FIRST_NAME,?\
LAST_NAME,?AGE,?SEX,?INCOME)?\
VALUES?('%s',?'%s',?'%d',?'%c',?'%d'?)"?%?\
('Mac',?'Mohan',?20,?'M',?2000)
try:
#?執行sql語句
cursor.execute(sql)
#?提交到數據庫執行
db.commit()
except:
#?發生錯誤時回滾
db.rollback()
#?關閉數據庫連接
db.close()
可以看到,數據已經插入了
4.4執行事務
事務機制可以確保數據一致性。
事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要么都做,要么都不做。
一致性(consistency)。事務必須是使數據庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
隔離性(isolation)。一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對并發的其他事務是隔離的,并發執行的各個事務之間不能互相干擾。
持久性(durability)。持續性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。
Python DB API 2.0 的事務提供了兩個方法 commit 或 rollback。#?SQL刪除記錄語句
sql?=?"DELETE?FROM?EMPLOYEE?WHERE?AGE?>?'%d'"?%?(20)
try:
#?執行SQL語句
cursor.execute(sql)
#?向數據庫提交
db.commit()
except:
#?發生錯誤時回滾
db.rollback()
4.5數據庫查詢操作
Python查詢Mysql使用 fetchone() 方法獲取單條數據, 使用fetchall() 方法獲取多條數據。fetchone():?該方法獲取下一個查詢結果集。結果集是一個對象
fetchall():接收全部的返回結果行.
rowcount:?這是一個只讀屬性,并返回執行execute()方法后影響的行數。#!/usr/bin/python
#?-*-?coding:?UTF-8?-*-
import?MySQLdb
#?打開數據庫連接
db?=?MySQLdb.connect("localhost",?"testuser",?"test123",?"TESTDB",?charset='utf8'?)
#?使用cursor()方法獲取操作游標
cursor?=?db.cursor()
#?SQL?查詢語句
sql?=?"SELECT?*?FROM?EMPLOYEE_1?\
WHERE?INCOME?>?'%d'"?%?(1000)
try:
#?執行SQL語句
cursor.execute(sql)
#?獲取所有記錄列表
results?=?cursor.fetchall()
for?row?in?results:
fname?=?row[0]
lname?=?row[1]
age?=?row[2]
sex?=?row[3]
income?=?row[4]
#?打印結果
print?"fname=%s,lname=%s,age=%d,sex=%s,income=%d"?%?\
(fname,?lname,?age,?sex,?income?)
except:
print?"Error:?unable?to?fecth?data"
#?關閉數據庫連接
db.close()
查詢EMPLOYEE_1表中salary(工資)字段大于1000的所有數據:
4.5數據庫更新操作
新操作用于更新數據表的的數據,以下實例將 EMPLOYEE_1 表中的 SEX 字段為 'M' 的 AGE 字段遞增 1:#!/usr/bin/python
#?-*-?coding:?UTF-8?-*-
import?MySQLdb
#?打開數據庫連接
db?=?MySQLdb.connect("localhost",?"testuser",?"test123",?"TESTDB",?charset='utf8'?)
#?使用cursor()方法獲取操作游標
cursor?=?db.cursor()
#?SQL?更新語句
sql?=?"UPDATE?EMPLOYEE?SET?AGE?=?AGE?+?1?WHERE?SEX?=?'%c'"?%?('M')
try:
#?執行SQL語句
cursor.execute(sql)
#?提交到數據庫執行
db.commit()
except:
#?發生錯誤時回滾
db.rollback()
#?關閉數據庫連接
db.close()
六、錯誤處理
以下為常見異常及解釋
總結
以上是生活随笔為你收集整理的python mysqldb_python学习-使用MySQLdb操作mysql数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 银河 E8 确认亮相广州车展:吉利 SE
- 下一篇: ROG 掌机发布 BIOS 333 更新