数据库之sqlalchemy
1.安装sqlalchemy
pip3 install sqlalchemy
pip3 install pymysql
2.设置数据库信息
1 dialect+driver://username:password@host:port/database 2 3 解释: 4 5 dialect:数据库,如:sqlite、mysql、oracle等 6 driver:数据库驱动,用于连接数据库的,本文使用pymysql 7 username:用户名 8 password:密码 9 host:IP地址 10 port:端口 11 database:数据库 12 13 配置: 14 新建DB_Url.py文件, 15 16 内容: 17 HOST = 'localhost' 18 PORT = 3306 19 USERNAME = 'root' 20 PASSWORD = '123456' 21 DB = 'learn' 22 23 # dialect + driver://username:passwor@host:port/database 24 DB_URI = f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DB}'
3.创建引擎,连接数据库并测试:
1 from sqlalchemy import create_engine 2 from config import DB_URI 3 4 5 engine = create_engine(DB_URI) # 创建引擎 6 conn = engine.connect() # 连接 7 result = conn.execute('SELECT 1') # 执行SQL 8 print(result.fetchone()) 9 conn.close() # 关闭连接
4.创建ORM模型并创建一个student表映射到数据库
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.orm import sessionmaker from DB_Url import DB_URI engine = create_engine(DB_URI) Base = declarative_base(engine) # SQLORM基类 session = sessionmaker(engine)() # 构建session对象 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表 Base.metadata.create_all() # 将模型映射到数据库中
5.新增数据
1 添加单条数据: 2 student = Student(name='Tony', age=18, sex='male') # 创建一个student对象 3 session.add(student) # 添加到session 4 session.commit() # 提交到数据库 5 6 添加多条数据: 7 session.add_all([ 8 Student(name='Jane', age=16, sex='female'), 9 Student(name='Ben', age=20, sex='male') 10 ]) 11 session.commit()
6.获取数据:
sqlalchemy提供了query()方法来查询数据
1 item_list = session.query(Student).all() 2 print(item_list) 3 for item in item_list: 4 print(item.name, item.age)
7.指定查询列
item0 = session.query(Student.name).all() print('session.query(列名).all()的结果:',item0)
8.获取返回数据的第一行
item0 = session.query(Student.name).first() print('session.query().first()的结果:',item0)
9.使用filter()方法进行筛选过滤
item_list1= session.query(Student.age).filter(Student.id>=8).all() print('session.query(目标).filter(条件).all()的结果:',item_list1)
10.使用order_by()进行排序
item_list2 = session.query(Student.name,Student.age).order_by(Student.age.desc()).all() print('session.query(目标).order_by(排序关键词,desc->倒序).all()的结果:',item_list2)
11.多个查询条件(and和or)
1 #多个条件查询(and 和 or),默认and 2 # 默认为and, 在filter()中用,分隔多个条件表示and 3 4 item_list = session.query(Student.name,Student.id,Student.age).filter( 5 Student.age >= 13,Student.id > 8 6 ).all() 7 print('session.query(目标).filter(条件1,条件2,...).all()的结果:',item_list)
or_的用法:
from sqlalchemy import or_ item_list1 = session.query(Student.name).filter( or_(Student.id>5,Student.age<10) ).all() print('session.query(目标).filter(or_(条件1,条件2,...)).all()的结果:',item_list1)
12.缺省查值:
1 #等于的用法: 2 item_list1 = session.query(Student.name,Student.age,Student.id).filter( 3 Student.age == 22 4 ).all() 5 print(item_list1) 6 7 #不等于的用法: 8 item_list1 = session.query(Student.name,Student.age,Student.id).filter( 9 Student.age != 22 10 ).all() 11 print(item_list1) 12 13 #like的用法: 14 item_list2 = session.query(Student.name,Student.age,Student.id).filter( 15 Student.name.like('%小%') 16 ).all() 17 print(item_list2) 18 19 #in的用法:注意---in方法的范围边界都包含 20 item_list1 = session.query(Student.name,Student.age,Student.id).filter( 21 Student.age.in_([10,20]) 22 ).all() 23 print(item_list1)
13.计数--count()
1 count = session.query(Student).count() 2 print(count)
14.切片:
1 #切片:session.query(目标).all()[切片方法] 2 item_list = session.query(Student.name).all()[1:5] 3 print(item_list)
15.修改数据:
1 #使用update()方法,update完成后记得执行session.commit() 2 3 session.query(Student).filter(Student.id == 1).update({'name':'toney'}) 4 session.commit() 5 6 item = session.query(Student.name).first() 7 print(item)
16.删除数据:
1 #删除数据使用delete()方法,同样也需要执行session.commit()提交事务 2 3 session.query(Student).filter(Student.name == 'toney').delete() 4 session.commit() 5 item_list = session.query(Student.name).all() 6 print(item_list)
浙公网安备 33010602011771号