首页 > 技术文章 > python mysql and ORM

leslielai 2019-07-11 17:01 原文

import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy import func
# 创建引擎
engine = create_engine("mysql+pymysql://root:leslie20@localhost/gxdb",encoding='utf-8',echo=True)
Base = declarative_base() #生成orm基类


class User(Base): # 创建User类并继续Base基类
__tablename__ = 'user' #表名
id = Column(Integer, primary_key=True)
name = Column(String(32))
password = Column(String(64))
age = Column(Integer)


Base.metadata.create_all(engine) # 创建表

# 添加记录
session_class = sessionmaker(bind=engine) # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
session = session_class() # 生成session实例
# user_obj = User(name="leslie",password="leslie20") # 生成你要创建的数据对象
# session.add(user_obj) # 把要创建的数据对象添加到这个session里,一会统一创建
# session.commit() # 提交事务,创建数据
# 查询
my_user = session.query(User).filter_by(name="leslie").first()
print(my_user.name,my_user.password)

# 修改
my_user = session.query(User).filter_by(name="leslie").first()
my_user.name = "Leslie"
session.commit()

# 删除
user_d = session.query(User).filter_by(id=5).first()
# session.delete(user_d)
# session.commit()

# 回滚
session.add(User(name='bob', password='12345'))
print(session.query(User).filter_by(name='bob').all()) #这时看session里有你刚添加的数据
print("--"*20)
session.rollback()
print(session.query(User).filter_by(name='bob').all()) # 再查session这条数据没有了

# 查询所有数据
print(session.query(User.id, User.name, User.password).all())
# 多条件查询
print(session.query(User.id, User.name, User.age).filter(User.id>5).filter(User.id<7).all())
# 统计下叫leslie的有多少人,mysql默认不区分大小写
print(session.query(User).filter(User.name=='leslie').count())
# 按名字分组看每人的数据统计等情况
print(session.query(func.count(User.name), User.name, func.sum(User.age)).group_by(User.name).all())

推荐阅读