App下載

帶你了解什么是Python操作MySQL數(shù)據(jù)庫

猿友 2020-07-29 14:39:01 瀏覽數(shù) (6475)
反饋

寫這篇文章主要是為了介紹Python操作MySQL數(shù)據(jù)庫,并結合相應的實例帶你更加深入了解。文中的代碼實例很詳細,對大家有一定的參考學習價值。

1.什么是pymysql?

PyMySQL是在Python3.x版本中用于連接MySQL服務器的一個庫,Python2中使用mysqldbPyMySql遵循Python數(shù)據(jù)庫API v2.0的規(guī)范,并包含了pure-Python MySQL客戶端庫。

2.安裝PyMySQL

 $ pip install pymysql

3.MySQL數(shù)據(jù)庫安裝與配置

在用PyMySQL連接MySQL數(shù)據(jù)庫之前,請確保MySQL數(shù)據(jù)庫安裝配置完成,具體如何安裝與配置MySQL數(shù)據(jù)庫,請參考 MySQL 安裝MySQL 管理。

4.1.連接數(shù)據(jù)庫操作

import pymysql


# 數(shù)據(jù)庫服務器名
HOSTNAME = 'node05'
# 數(shù)據(jù)庫用戶名
USER = 'root'
# 數(shù)據(jù)庫名
DATABASE = 'cayman'
# 數(shù)據(jù)庫密碼
PASSWORD = 'Love88me'


# 打開數(shù)據(jù)庫連接
conn = pymysql.connect(HOSTNAME, USER, PASSWORD, DATABASE)


# 使用cursor()方法創(chuàng)建一個游標對象
cursor = conn.cursor()


# 使用execute()方法執(zhí)行SQL查詢語句
cursor.execute("select VERSION()")


# 使用fetchone()查詢單條數(shù)據(jù)
data = cursor.fetchone()
print(f"Database Version: {data}")


# 關閉數(shù)據(jù)庫連接
conn.close()

4.2.創(chuàng)建表操作

import pymysql


# 設置數(shù)據(jù)庫配置項
HOSTNAME = 'node05'
USERNAME = 'root'
PASSWORD = 'Love88me'
DATABASE = 'cayman'


# 打開數(shù)據(jù)庫連接
db = pymysql.connect(HOSTNAME, USERNAME, PASSWORD, DATABASE)


# 使用cursor對象創(chuàng)建一個流標對象
cursor = db.cursor()


# 使用execute()方法執(zhí)行SQL, 如果表存在則刪除
cursor.execute("DROP TABLE IF EXISTS employee")


# 使用預處理語句創(chuàng)建表
sql = """ CREATE TABLE employee(
    id bigint primary key auto_increment,
    user_name varchar(50) not null,
    age int,
    sex char(1),
    income float
)
"""


# 執(zhí)行sql語句
cursor.execute(sql)


# 關閉數(shù)據(jù)庫連接
db.close()

4.3.1.數(shù)據(jù)庫插入單條語句

import pymysql


# 設置數(shù)據(jù)庫配置項
HOSTNAME = 'node05'
USERNAME = 'root'
PASSWORD = 'Love88me'
DATABASE = 'cayman'


# 打開數(shù)據(jù)庫連接
db = pymysql.connect(HOSTNAME, USERNAME, PASSWORD, DATABASE)


# 使用cursor對象創(chuàng)建一個流標對象
cursor = db.cursor()


# SQL語句
sql = """
 insert into employee(user_name, age, sex, income) values ('風清揚', 64, '男', 22000);
"""


try:
    # 執(zhí)行sql語句
    cursor.execute(sql)
    # 提交
    db.commit()
except:
    # 如果發(fā)生錯誤就回滾
    db.rollback()


# 關閉數(shù)據(jù)庫連接
db.close()

4.3.2.數(shù)據(jù)庫插入多條語句

import pymysql


# 設置數(shù)據(jù)庫配置項
HOSTNAME = 'node05'
USERNAME = 'root'
PASSWORD = 'Love88me'
DATABASE = 'cayman'


# 打開數(shù)據(jù)庫連接
db = pymysql.connect(HOSTNAME, USERNAME, PASSWORD, DATABASE)


# 使用cursor對象創(chuàng)建一個流標對象
cursor = db.cursor()


# SQL語句
sql = " insert into employee(user_name, age, sex, income) values (%s, %s, %s, %s)"


data = (
    ('風清揚', 64, '男', 22000),
    ('令狐沖', 22, '男', 14000),
    ('任盈盈', 20, '男', 10000),
    ('東方不敗', 32, '男', 18000),
    ('任我行', 56, '男', 17000),
    ('段譽', 33, '男', 19000),
    ('王語嫣', 26, '女', 9000),
    ('木婉清', 23, '女', 6000),
    ('喬峰', 38, '男', 23000),
    ('阿朱', 24, '女', 5000),
    ('阿紫', 22, '女', 5500),
    ('虛竹', 35, '男', 11000),
    ('夢姑', 25, '女', 6500),
    ('梅超風', 41, '女', 15000),
    ('陳玄風', 44, '男', 12000),
    ('楊過', 28, '男', 24000),
    ('小龍女', 38, '女', 15000),
    ('鳩摩智', 44, '男', 16000)
)


try:
    # 執(zhí)行sql語句
    cursor.executemany(sql, data)
    # 提交
    db.commit()
except:
    # 如果發(fā)生錯誤就回滾
    db.rollback()


# 關閉數(shù)據(jù)庫連接
db.close()

4.4.數(shù)據(jù)庫查詢

Python查詢MySQL使用fetchone()獲取單條數(shù)據(jù),使用fetchall()方法獲取多條數(shù)據(jù)。

  • fetchone(): 該方法獲取下一個查詢結果集。結果集是一個對象

  • fetchall(): 接收全部的返回結果行;

  • rowcount(): 這是一個只讀屬性,并返回執(zhí)行execute()方法后影響的行數(shù)。

4.4.1.查詢示例

查詢employee表中income(工資)大于20000的所有數(shù)據(jù)

# 1.查詢employee表中工資大于20000的員工信息
import pymysql


# 設置數(shù)據(jù)庫配置項
HOSTNAME = 'node05'
USERNAME = 'root'
PASSWORD = 'Love88me'
DATABASE = 'cayman'


# 打開數(shù)據(jù)庫連接
db = pymysql.connect(HOSTNAME, USERNAME, PASSWORD, DATABASE)


# 使用cursor對象創(chuàng)建一個流標對象
cursor = db.cursor()


# 查詢語句
sql = "select * from employee where income >'%d' "%(20000)


try:
    # 執(zhí)行sql語句
    cursor.execute(sql)
    # 獲取所有滿足條件的列表
    ret = cursor.fetchall()
    # 遍歷打印結果
    for row in ret:
        user_name = row[1]
        age = row[2]
        sex = row[3]
        income = row[4]
        print(f"員工: {user_name},年齡: {age}, 性別: {sex}, 工資: {income}")
except:
    print("無滿足條件的數(shù)據(jù)或查詢出錯!!")


# 關閉數(shù)據(jù)庫連接
db.close()

4.5.數(shù)據(jù)庫更新操作

import pymysql


# 設置數(shù)據(jù)庫配置項
HOSTNAME = 'node05'
USERNAME = 'root'
PASSWORD = 'Love88me'
DATABASE = 'cayman'


# 打開數(shù)據(jù)庫連接
db = pymysql.connect(HOSTNAME, USERNAME, PASSWORD, DATABASE)


# 使用cursor對象創(chuàng)建一個流標對象
cursor = db.cursor()


# 更新語句
sql = "update employee set income=income+income*0.1 where sex='%c'"%('女')


try:
    # 執(zhí)行SQL語句
    cursor.execute(sql)
    # 提交
    db.commit()


except:
    # 發(fā)生錯誤時回滾
    db.rollback()


# 關閉數(shù)據(jù)庫
db.close()

4.6.刪除操作

import pymysql


# 設置數(shù)據(jù)庫連接信息
HOSTNAME = 'node05'
USERNAME = 'root'
PASSWORD = 'Love88me'
DATABASE = 'cayman'


# 打開數(shù)據(jù)庫連接
db = pymysql.connect(HOSTNAME, USERNAME, PASSWORD, DATABASE)


# 使用cursor()方法獲取游標
cursor = db.cursor()


# 構建刪除數(shù)據(jù)SQL語句
sql = "delete from employee where user_name = '%s'"%('鳩摩智')


try:
    # 執(zhí)行sql語句
    cursor.execute(sql)
    # 提交
    db.commit()


except:
    # 發(fā)生異常時回滾
    db.rollback()


# 關閉數(shù)據(jù)庫連接
db.close()

4.7 執(zhí)行事務操作

在數(shù)據(jù)庫操作中,事務機制可以保證數(shù)據(jù)的一致性。最基本的事務應當具備4個屬性: 原子性、一致性、隔離性、和持久性。這四個屬性被稱作ACID特性。

  • 原子性(Atomicity): 一個事務是一個不可分割的工作單位,事務中包括的諸操作要么都做,要么都不做。

  • 一致性(Consistency): 事務必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)。一致性與原子性是密切相關的。

  • 隔離性(Isolation): 一個事務的執(zhí)行不能被其他事務干擾。即一個事務內部的操作及使用的數(shù)據(jù)對并發(fā)的其他事務是隔離的,并發(fā)執(zhí)行的各個事務之間不能互相干擾。

  • 持久性(Durability): 持續(xù)性也稱永久性(permanence),指一個事務一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。

Python DB API 2.0的事務提供了兩個方法commitrollback。對于支持事務的數(shù)據(jù)庫編程中,當流標建立時,就自動開啟了一個隱形的數(shù)據(jù)庫事務。

4.8 錯誤處理

DB API中定義了一些數(shù)據(jù)庫操作的錯誤及異常,下表列出了這些錯誤和異常:

MySQL錯誤處理

以上就是關于Python操作MySQL數(shù)據(jù)庫的講解了,希望對大家有所幫助,或許同學們也可以進入以下教程學習一下

python教程:http://o2fo.com/python/

python3基礎微課:http://o2fo.com/minicourse/play/python3course

1 人點贊