文章目錄
- 一、pymysql和sqlalchemy的區別
- 二、sqlalchemy的詳細使用
- 1.安裝庫
- 2.核心思想
- 3.整體思路
- 4.sqlalchemy需要連接數據庫
- 5.使用步驟
- 1.手動提前創建數據庫
- 2.使用代碼創建數據表
- 3.用代碼操作數據表
- 3.1 增加數據
- 3.2 查詢數據
- 3.3 刪除數據
- 3.4 修改數據
一、pymysql和sqlalchemy的區別
pymysql和sqlalchemy都是Python用來操作數據庫的工具,兩者的區別如下:
- pymysql庫在學校用的較多,也稱學者庫;sqlalchemy基本都是在企業應用,也稱企業庫;
- pymysql庫使用sql語句操作數據庫,所以非常繁瑣,要求程序員要記憶大量sql語法;而sqlalchemy是采用操作對象的方式來操作數據庫,對程序員很友好,不必記憶較多sql語句用法;
綜上所述,推薦大家日后在實際開發中使用sqlalchemy庫。
二、sqlalchemy的詳細使用
1.安裝庫
安裝命令:pip install sqlalchemy
2.核心思想
用操作對象的方式去操作數據庫。
3.整體思路
借用sqlalchemy的基本框架
使用和豐富框架 ----- 滿足日常需求
4.sqlalchemy需要連接數據庫
連接數據庫的方法模版如下:
數據庫類型+數據庫驅動://用戶名:密碼@電腦IP:mysql端口號/自定義數據庫名?charset=utf8
示例如下:
mysql+pymysql://mysql賬號:mysql密碼@localhost:3306/數據庫名?charset=utf8
5.使用步驟
1.手動提前創建數據庫
打開Navicat工具,建立好連接之后,右鍵點擊連接名稱,在下拉列表中選擇【新建數據庫】。
進來新建數據庫頁面之后,數據庫名字自己隨便起,注意:字符集要選擇utf8mb4,排序規則要選擇utf8mb4_general_ci,千萬不能有錯,完了點擊確定即可,數據庫就創建好了。
2.使用代碼創建數據表
使用代碼創建數據表,建議單獨建個Python文件,方便一會調用,該文件只用來創建數據表,我就取名叫create_table.py,這里先附上創建數據表全部代碼如下:
from sqlalchemy import Column, Integer, String, Enum
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine# 1、找到基本框架 -- 把自定義的類變成數據表 declarative_base--聲明基類
Base = declarative_base()# 2、連接數據庫
engine = create_engine('mysql+pymysql://root:66666666@localhost:3306/python1?charset=utf8'
)# 3、自定義類 -- 創建表
class User(Base):# 3.1 表名__tablename__ = '員工表'# 3.2 字段信息id = Column(Integer, primary_key=True, autoincrement=True, doc='員工ID')name = Column(String(20), doc='員工名字')age = Column(Integer, doc='員工年齡')sex = Column(Enum('男', '女'), doc='員工性別')phone = Column(String(30), doc='員工電話')# 3.3 字段信息初始化def __init__(self, id, name, age, sex, phone):self.id = idself.name = nameself.age = ageself.sex = sexself.phone = phone# 4、表的生成
Base.metadata.create_all(engine)
需要注意的是,代碼中第三大部分創建表這里需要自己根據自己的實際需求去寫,如下圖:
其余的所有部分都是創建數據表的標準模板,可以不做改動。
3.用代碼操作數據表
用代碼操作數據表,也就是通過代碼對數據庫中數據表內容進行增刪改查等等操作,這里我也再新建一個Python文件,取名叫operation_table.py,先附上固定模版代碼部分:
from create_table import User
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker# 1、連接數據庫
engine = create_engine('mysql+pymysql://root:66666666@localhost:3306/python1?charset=utf8'
)# 2、創建一個會話對象 -- 第三者 -- 執行語句
# 2.1 綁定引擎
dbsession = sessionmaker(bind=engine)
# 2.2 實例化
session = dbsession()# 3、數據增刪改查# 4、事務提交和關閉
session.commit()
session.close()
代碼中第三部分數據的增刪改查是根據自身需求實際對數據進行操作,其余所有部分均為固定模版,可以不做改動。
接下來說說第三部分,如何用代碼對數據表中的數據做增刪改查。
3.1 增加數據
A、增加單個數據:使用add()方法,示例如下所示
user = User(0, '張三', 18, '男', '1001')
session.add(user)
B、增加多個數據:使用add_all(列表)方法,示例如下所示
user1 = User(0, '張三', 20, '男', '1003')
user2 = User(0, '李四', 21, '女', '1004')
user3 = User(0, '王五', 22, '男', '1005')
user4 = User(0, '趙六', 23, '女', '1006')
user5 = User(0, '麻七', 24, '男', '1007')
session.add_all([user1, user2, user3, user4, user5])
3.2 查詢數據
A、查詢所有員工的信息,示例如下所示
query_obj = session.query(User).all()
for obj in query_obj:print(obj.id, obj.name, obj.age, obj.sex, obj.phone)
B、查詢年齡在19-24的員工信息,示例如下所示
query_obj = session.query(User).filter(User.age.between(19, 24)).all()
for obj in query_obj:print(obj.id, obj.name, obj.age, obj.sex, obj.phone, sep=' | ')
C、查詢性別為男的員工信息,示例如下所示
query_obj = session.query(User).filter(User.sex == '男').all()
for obj in query_obj:print(obj.id, obj.name, obj.age, obj.sex, obj.phone, sep=' | ')
D、查詢性別為男的員工信息,并按年齡大小排序【升序:asc(),降序:desc()】,示例如下所示
query_obj = session.query(User).filter(User.sex == '男').order_by(User.age.asc()).all()
for obj in query_obj:print(obj.id, obj.name, obj.age, obj.sex, obj.phone, sep=' | ')
3.3 刪除數據
A、刪除員工:姓名=張三,示例如下所示
session.query(User).filter(User.name == '張三').delete()
B、刪除員工:電話=1005,示例如下所示
session.query(User).filter(User.phone == 1005).delete()
C、清空員工信息表,示例如下所示
session.query(User).delete()
3.4 修改數據
A、id=18的用戶姓名改成小明,示例如下所示
session.query(User).filter(User.id == 18).update({'name': '小明'})
B、id=22的用戶姓名改成小紅,性別改成女,電話改成0000,示例如下所示
session.query(User).filter(User.id == 22).update({'name': '小紅', 'sex': '女', 'phone': '0000'})