• Python + SQLAlchemy操作MySQL数据库(ORM)


    一、sqlalchemy简介

    SQLAlchemy是用Python编程语言开发的一个开源项目。它提供了SQL工具包和ORM(对象关系映射)工具,使用MIT许可证发行。

    SQLAlchemy采用简单的Python语言,提供高效和高性能的数据库访问,实现了完整的企业级持久模型。它的理念是SQL数据库的量级和性能比对象集合重要,而对象集合的抽象又重要于表和行。

    二、sqlalchemy的使用
    1、安装
    1. pip install pymysql
    2. pip install sqlalchemy
    2、CRUD(Create Read Update Delete,增查改删)
    1. from sqlalchemy import create_engine #导入数据库引擎
    2. from sqlalchemy.ext.declarative import declarative_base #导入orm基础类
    3. from sqlalchemy import Column,Integer,String,DateTime #导入orm的列、数据类型
    4. from sqlalchemy.orm import sessionmaker #导入session(会话)生成器
    5. #1.创建一个orm的基础类
    6. Base = declarative_base()
    7. #2.创建数据库连接的引擎(数据库+数据库操作包://用户名:密码@数据库服务器地址:端口号/数据库名)
    8. engine = create_engine('mysql+pymysql://root:#####@localhost:3306/dbms')
    9. #3.将数据库连接引擎绑定到Base对象上
    10. Base.metadata.create_all(engine)
    11. #4.创建Session,绑定数据库引擎
    12. Session = sessionmaker(bind=engine)
    13. #5.创建Session对象(会话对象)
    14. session = Session()
    15. #6.声明ORM映射类,必须继承Base
    16. class Employee(Base):
    17. __tablename__ = "employee"
    18. id = Column(Integer,primary_key=True)
    19. name = Column(String(30))
    20. gender = Column(String(4))
    21. birthday = Column(DateTime)
    22. phone = Column(String(11))
    23. address = Column(String(50))
    24. def __init__(self,name,gender,birthday,phone,address):
    25. self.name = name
    26. self.gender = gender
    27. self.birthday = birthday
    28. self.phone = phone
    29. self.address = address
    30. #7.定义单表的CRUD函数
    31. #7.1 增加员工信息
    32. def insertEmployee(emp):
    33. try:
    34. session.add(emp)
    35. session.commit()
    36. except Exception as err:
    37. print("增加操作失败,%s" % err)
    38. session.rollback()
    39. return False
    40. else:
    41. return True
    42. finally:
    43. session.close()
    44. #7.2 删除员工信息
    45. def deleteEmployee(emp_id):
    46. try:
    47. emp_to_delete = session.query(Employee).filter_by(id=emp_id).first()
    48. if emp_to_delete:
    49. session.delete(emp_to_delete)
    50. session.commit()
    51. except Exception as err:
    52. print("删除操作失败,%s" % err)
    53. session.rollback()
    54. return False
    55. else:
    56. return True
    57. finally:
    58. session.close()
    59. #7.3 修改员工信息
    60. def updateEmployee(emp):
    61. try:
    62. emp_update = session.query(Employee).filter_by(id=emp.id).first()
    63. if emp_update:
    64. emp_update.name = emp.name
    65. emp_update.gender = emp.gender
    66. emp_update.birthday = emp.birthday
    67. emp_update.phone = emp.phone
    68. emp_update.address = emp.address
    69. session.commit()
    70. except Exception as err:
    71. print("修改操作失败,%s" % err)
    72. session.rollback()
    73. return False
    74. else:
    75. return True
    76. finally:
    77. session.close()
    78. #7.4 查询所有
    79. def findAllEmployee():
    80. try:
    81. res = session.query(Employee).all()
    82. except Exception as err:
    83. print("查询失败,%s" % err)
    84. else:
    85. return res
    86. finally:
    87. session.close()
    3、使用unittest进行测试
    1. from src.com import MysqlUtils
    2. import unittest
    3. class TestORM(unittest.TestCase):
    4. def test_insert(self):
    5. emp = MysqlUtils.Employee('AA','男','2001-10-15','13578956589','宁夏银川')
    6. if(MysqlUtils.insertEmployee(emp)):
    7. print("增加成功")
    8. print("---------------------------------------")
    9. def test_delete(self):
    10. if(MysqlUtils.deleteEmployee(26)):
    11. print("删除成功")
    12. def test_update(self):
    13. emp = MysqlUtils.Employee('刘备','男','2024-11-11','18991758746','湖北宜昌');
    14. emp.id = 17
    15. if(MysqlUtils.updateEmployee(emp)):
    16. print("修改成功")
    17. def test_findAll(self):
    18. res = MysqlUtils.findAllEmployee()
    19. for i in res:
    20. print(i.id, i.name)

  • 相关阅读:
    校园微社区微信小程序源码/二手交易/兼职交友微信小程序源码
    【重识云原生】第六章容器6.1.12节——Docker网络模型设计
    新手开抖店之前,这三个核心点,一定要提前了解!
    C++11之constexpr
    docker-本地部署-后端
    【Node.js从基础到高级运用】七、基本的网络编程
    Python爬虫之入门保姆级教程
    Python文件操作
    关于系统/网络运维面试经验总结
    Go的简单入门:开始使用泛型
  • 原文地址:https://blog.csdn.net/m0_37911706/article/details/137978435