1. 程式人生 > 其它 >sqlalchemy連線MySQL資料庫基本操作

sqlalchemy連線MySQL資料庫基本操作

sqlalchemy_test.py

#!/usr/bin/env python3.8.6
# _*_ coding: utf-8 _*_
# Description:
# Author: qiaoxiaohang <[email protected]>
# Date: 2022/4/8




from config import DB_URI
from sqlalchemy import create_engine


#todo 建立引擎並連結資料庫
# engine = create_engine(DB_URI)#建立引擎
# conn = engine.connect()#連結
# result = conn.execute('select * from boo') # print(result.fetchone()) # conn.close()#關閉連結 # todo 建立ORM模型並對映到資料庫中 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import create_engine,Column,Integer,String from sqlalchemy.orm import sessionmaker engine = create_engine(DB_URI)#
建立引擎 Base = declarative_base(engine)# 建立 sql rom基類 session = sessionmaker(engine)() #構建session物件 #todo 建立資料庫表 ''' 建立資料庫表student class Student(Base): __tablename__ = "student" id = Column(Integer,primary_key=True,autoincrement=True) name = Column(String(50)) age = Column(Integer) sex = Column(String(10)) Base.metadata.create_all()# 將模型對映到資料庫中
''' #todo 新增資料 class Student(Base): __tablename__ = "student" id = Column(Integer,primary_key=True,autoincrement=True) name = Column(String(50)) age = Column(Integer) sex = Column(String(10)) ''' student = Student(name='Tony',age = 16,sex = 'male') session.add(student)#單個數據插入 session.commit() ----------------------------------------------------- session.add_all([ Student(name='Jane', age=16, sex='female'), Student(name='Ben', age=20, sex='male') ])#批量插入資料 session.commit() ''' #todo 查詢資料 --sqlalchemy提供了query()方法來查詢資料 data_list = session.query(Student).all() print(data_list) for data in data_list: print(data.name,data.age,data.sex) #輸出: # [<__main__.Student object at 0x0000016EE319B310>, <__main__.Student object at 0x0000016EE319B280>, <__main__.Student object at 0x0000016EE319B370>] # Tony 16 male # Jane 16 female # Ben 20 male #todo 指定查詢 name_list = session.query(Student.name).all() # name_list = session.query(Student.name).first()#獲取返回資料的第一行 print(name_list) # 輸出:[('Tony',), ('Jane',), ('Ben',)] #todo 使用filter()方法進行篩選過濾 filter_list = session.query(Student.name).filter(Student.age>=18).all() print(filter_list)#輸出:[('Tony',), ('Ben',)] #todo 使用order_by()進行排序 item_list = session.query(Student.name, Student.age).order_by(Student.age.desc()).all() # desc()表示倒序 print(item_list) # [('Ben', 20), ('Tony', 18), ('Jane', 16)] # todo 多個查詢條件(and和or) # 預設為and, 在filter()中用,分隔多個條件表示and item_list = session.query(Student.name, Student.age, Student.sex).filter( Student.age >= 10, Student.sex == 'female' ).all() print(item_list) # [('Jane', 16, 'female')] from sqlalchemy import or_ # 使用or_連線多個條件 item_list = session.query(Student.name, Student.age, Student.sex).filter( or_(Student.age >= 20, Student.sex == 'female') ).all() print(item_list) # [('Jane', 16, 'female'), ('Ben', 20, 'male')] # todo equal/like/in # 等於 item_list = session.query(Student.name, Student.age, Student.sex).filter( Student.age == 18 ).all() print(item_list) # [('Tony', 18, 'male')] # 不等於 item_list = session.query(Student.name, Student.age, Student.sex).filter( Student.age != 18 ).all() print(item_list) # [('Jane', 16, 'female'), ('Ben', 20, 'male')] # like item_list = session.query(Student.name, Student.age, Student.sex).filter( Student.name.like('%To%') ).all() print(item_list) # [('Tony', 18, 'male')] # in item_list = session.query(Student.name, Student.age, Student.sex).filter( Student.age.in_([16, 20]) ).all() print(item_list) # [('Jane', 16, 'female'), ('Ben', 20, 'male')] # todo count計算個數 count = session.query(Student).count() print(count) # 3 # todo 切片 item_list = session.query(Student.name).all()[:2] print(item_list) # [('Tony',), ('Jane',)] #todo 修改資料 #修改資料可以使用update()方法,update完成後記得執行session.commit() # 修改Tony的age為22 session.query(Student).filter(Student.name == 'Tony').update({'age': 22}) session.commit() item = session.query(Student.name, Student.age).filter(Student.name == 'Tony').first() print(item) #('Tony', 22) # todo 刪除資料 # 刪除資料使用delete()方法,同樣也需要執行session.commit()提交事務 # 刪除名稱為Ben的資料 session.query(Student).filter(Student.name == 'Ben').delete() session.commit() item_list = session.query(Student.name, Student.age).all() print(item_list)#[('Tony', 22), ('Jane', 16)]

資料庫配置引數

config.py

#!/usr/bin/env python3.8.6
# _*_ coding: utf-8 _*_
# Description:
# Author: qiaoxiaohang <[email protected]>
# Date: 2022/4/8
HOST = 'localhost'
PORT = 3306
USERNAME = 'root'
PASSWORD = '123456'
DB = 'test'
DB_URI = f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DB}'

 推薦一個不錯的網址:https://www.jb51.net/article/173950.htm