• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
夜码人
            管理     

数据库之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)

 

posted @ 2021-11-04 15:15  夜码人  阅读(165)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3