MySQL之ORM
MySQL之ORM
ORM
- 作用:
1. 提供简单的规则
2. 自动转换成SQL语句
- DB first: 手动创建数据库以及表 -> ORM框架 -> 自动生成类
- code first: 手动创建类、和数据库 -> ORM框架 -> 自动生成表
- 功能
- 创建数据库表
- 连接数据库(非SQLAlchemy,pymyql,mysqldb,....)
- 类转换SQL语句
- 操作数据行
增
删
改
查
- 便利的功能
创建单表:
class UserType(Base):
__tablename__ = 'usertype'
id = Column(Integer,primary_key=True,autoincrement=True)
title = Column(String(32),nullable=True,index=True)
class User(Base): __tablename__ = 'users' id = Column(Integer,primary_key=True,autoincrement=True) name = Column(String(32),nullable=True,index=True) age = Column(String(16),unique=True)
user_type_id = Column(Integer,ForeignKey('usertype.id'))
__table_args_ = (
UniqueConstraint('id','name',name='uix_id_name'),
Index('ix_id_name','name','id')
)
连接mysql数据库:
engine = create_engine('mysql+pymysql://数据库用户名:密码@主机IP:3306/数据库名?charset=utf8',max_overflow=5) Base.metadata.create_all(engine)
删除操作:
Base.metadata.drop_all(engine)
数据行增操作:
engine = create_engine('mysql+pymysql://数据库用户名:密码@主机IP:3306/数据库名?charset=utf8',max_overflow=5) Session = sessionmaker(bind=engine) session = Session() #类->表,对象->行 obj1 = UserType(title='普通用户') session.add(obj1)
# 添加多条数据
objs = [
UserType(title='超级用户'),
UserType(title='白金用户'),
UserType(title='黑金用户'),
] session.add_all(objs)
session.commit() session.close()
数据行查操作:
user_type_list = session.query(UserType).all()
user_type_list = session.query(UserType).filter(UserType.id>2)
user_type_list = session.query(UserType.id,UserType.title).filter(UserType.id>2)
for row in user_type_list:
print(row.id,row.title)
数据行删操作:
user_type_list = session.query(UserType.id,UserType.title).filter(UserType.id>2).delete()
数据行改操作:
user_type_list = session.query(UserType.id,UserType.title).filter(UserType.id>2).update({'title':'黑金'})
user_type_list = session.query(UserType.id,UserType.title).filter(UserType.id>2).update({UserType.title:UserType.title + "X"}, synchronize_session=False) user_list = session.query(User.id,User.name,User.age).filter(User.id>1).update({"age": User.age + 1}, synchronize_session="evaluate")
参考博客: http://www.cnblogs.com/wupeiqi/articles/5713330.html
----- END -----