运行出现错误可能需要下载https://dev.mysql.com/downloads/connector/python/
# Python ORM框架来操作MySQL SQLAlchemy
# pip install sqlalchemy
# 初始化数据库连接
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,String,create_engine,Integer,FLOAT
# 初始化数据库连接,修改为你的数据库用户名和密码
engine = create_engine('mysql+mysqlconnector://root:186373@localhost:3306/sqlfirst')
# 创建模型
Base=declarative_base()
class Player(Base):
__tablename__='player'
player_id=Column(Integer,primary_key=True,autoincrement=True)
team_id=Column(Integer)
player_name=Column(String(255))
height=Column(FLOAT(3,2))
#创建DBSession类型
DBSession=sessionmaker(bind=engine)
# 创建session对象
session=DBSession()
'''
# 创建player对象
new_player=Player(team_id=1003,player_name='约翰 - 科林斯',height=2.08)
# 添加到session
session.add(new_player)
# 提交即保存到数据库
session.commit()
# 关闭session
session.close()
'''
# 实现查找数据
def to_dict(self):
return {c.name:getattr(self,c.name,None) for c in self.__table__.columns}
# 将对象可以转化未dict类型
Base.to_dict=to_dict
# 查询身高 >=2.08 的球员有哪些
rows=session.query(Player).filter(Player.height>=2.08).all()
# 查询身高 ≥ 2.08,同时身高 ≤ 2.10 的球员
rows=session.query(Player).filter(Player.height>=2.08, Player.height <=2.10).all()
print([row.to_dict() for row in rows])
# 按照 team_id 进行分组,同时筛选分组后数据行数大于 5 的分组,并且按照分组后数据行数递增的顺序进行排序,显示 team_id 字段,以及每个分组的数据行数。
from sqlalchemy import func
rows=session.query(Player.team_id,func.count(Player.team_id)).group_by(Player.team_id).having(func.count(Player.team_id)>5).order_by(func.count(Player.player_id).asc()).all()
print(rows)
# 删除
row=session.query(Player).filter(Player.player_name=='约翰 - 科林斯').first()
session.delete(row)
session.commit()
session.close()
# 修改
row = session.query(Player).filter(Player.player_name=='索恩-马克').first()
row.height=2.17
session.commit()
session.close()
更多参考
https://www.liaoxuefeng.com/wiki/1016959663602400/1017803857459008
官方使用链接
https://docs.sqlalchemy.org/en/13/orm/tutorial.html