1. 理解对象关系映射
对象关系映射(Object-Relational Mapping, ORM): 作用是在关系型数据库和业务实体对象之间作一个映射,这样,在具体的操作业务对象的时,不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。简单理解:是可以将 py 语言翻译为 sql 语言,将 sql 语言翻译为 py 语言的的过程
SQLAlchemy:是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。
2. 利用sqlalchemy实现ORM
- 安装 sqlalchemy,在一台有安装有 mysql 数据库的机器上
pip install sqlalchemy
- 代码示例:
# object(oop) --> mysql(SQL)
import sqlalchemy
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import Session, sessionmaker
import pymysql
pymysql.install_as_MySQLdb()
# 1. 创建数据库引擎(连接数据库的过程)
# echo=True, 显示翻译好的sql语句
engine = sqlalchemy.create_engine("mysql://root:redhat@localhost/StudentProject",
encoding="utf8", echo=True)
# 2. 绑定并建立缓存
# session = Session()
mySession = sessionmaker(bind=engine)
session = mySession()
# 3. 建立数据库对象需要继承的基类
Base = declarative_base()
# 4. 自定义一个类,一个类就是一个数据库表,将其翻译成sql语句以生成一个数据库表
class Student(Base):
# 数据库表的名称
__tablename__ = 'stuinfo'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(20))
gender = Column(String(20))
def __repr__(self):
return 'Student<%s>' % (self.name)
if __name__ == '__main__':
# 5. 根据设置的信息创建数据库表-(创建类:创建数据库表的过程)
Base.metadata.create_all(engine)
# ***添加数据信息***:实例化对象添加一条信息
stu1 = Student(id=3, name='xiaoming', gender='女')
stu2 = Student(id=4, name='xiaogang', gender='男')
stu3 = Student(id=5, name='xiaoming', gender='男')
session.add(stu1) # 添加一条数据
session.add_all([stu2, stu3]) # 添加多条数据
session.commit() # 对数据进行增、删、改操作后一定要进行事务提交
# ***查询数据信息***
print(session.query(Student).all())
# 根据筛选条件查询信息
print(session.query(Student).filter_by(name='xiaoming').first())
print(session.query(Student).filter_by(name='xiaoming').all())
print(session.query(Student).filter_by(name='xiaogangbalbala').first())
# ***删除信息***
del_stu = session.query(Student).filter_by(name='xiaohong').first()
print('Before Delete: ', del_stu)
session.delete(del_stu)
session.commit() # 对数据进行增、删、改操作后一定要进行事务提交
del_stu = session.query(Student).filter_by(name='xiaohong').first()
print('After Delete: ', del_stu)
煮面要加牛奶
发布了37 篇原创文章 · 获赞 0 · 访问量 5286
私信
关注