对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。
SQLAlchemy安装和配置
安装命令:
pip install SQLAlchemy
验证:
import sqlalchemy
ORM模型介绍
常见类型:
- Integer
- Float
- Boolean
- ForeignKey:外键用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
- Date/DateTime
- String
新建ORM模型
from sqlalchemy import Column, String, Integer, create_engine, DATETIME
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# 初始化数据库连接:
engine = create_engine('mysql://root:root@localhost:3306/school_new?charset=utf8') # 'mysql://用户名:密码@IP:端口号/数据库名'
# 创建对象的基类:
Base = declarative_base()
# 创建session类型
Session = sessionmaker(bind=engine)
class School(Base):
__tablename__ = 'student'
id = Column(Integer, primary_key=True)
name = Column(String(200), nullable=False)
nickname = Column(String(200), nullable=True)
sex = Column(String(1), nullable=True)
in_time = Column(DATETIME, nullable=True)
# 创建表,内部会检查是否创建
School.metadata.create_all(engine)
class OrmTest(object):
def __init__(self):
self.session = Session()
def add_one(self):
# 新增记录
new_obj = School(
id=2,
name='张三',
nickname='san',
sex='男',
in_time='now'
)
# 添加到session
self.session.add(new_obj)
# 提交即保存到数据库
self.session.commit()
return new_obj
def main():
obj = OrmTest()
rest = obj.add_one()
print(rest.id)
main()
通过ORM查询数据
def get_one(self):
# 获取一条数据
return self.session.query(School).get(1)
def get_more(self):
# 获取多条数据
return self.session.query(School).filter_by(sex='男')
通过ORM修改/删除数据
# 修改
def update_data(self, sex):
# 修改多条数据
# 获取要修改的数据
data_list = self.session.query(School).filter_by(nickname='san')
for item in data_list:
item.nickname = 'er'
self.session.add(item)
self.session.commit()
# 修改单条数据
# new_obj = self.session.query(School).get(sex)
# if new_obj:
# new_obj.sex = '女'
# self.session.add(new_obj)
# self.session.commit()
# return True
# return False
# 删除
def delete_data(self, id):
# 删除数据
# 获取要删除的数据
new_obj = self.session.query(School).get(id)
self.session.delete(new_obj)
self.session.commit()