系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 数据库 > 其它 > 详细页面

python orm 框架中sqlalchemy用法实例详解

时间:2020-02-02来源:电脑系统城作者:电脑系统城

本文实例讲述了python orm 框架中sqlalchemy用法。分享给大家供大家参考,具体如下:

一.ORM简介

1. ORM(Object-Relational Mapping,对象关系映射):作用是在关系型数据库和业务实体对象之间做一个映射.

2. ORM优点:

向开发者屏蔽了数据库的细节,使开发者无需与SQL语句打交道,提高了开发效率;

便于数据库的迁移,由于每种数据库的SQL语法有差别,基于Sql的数据访问层在更换数据库时通过需要花费时间调试SQL时间,而ORM提供了独立于SQL的接口,ORM的引擎会处理不同数据库之间的差异,所以迁移数据库时无需更改代码.

应用缓存优化等技术有时可以提高数据库操作的效率.

3. SQLALchemy:是python中最成熟的ORM框架,资源和文档很丰富,大多数python web框架对其有很好的主持,能够胜任大多数应用场合,SQLALchemy被认为是python事实上的ORM标准.

二、代码

1.建表


 
  1. """
  2. Created on 19-10-22
  3. @author: apple
  4. @description:建表
  5. """
  6. import pymysql
  7. server = '127.0.0.1'
  8. user = 'root'
  9. # dev
  10. password = '123456'
  11. conn = pymysql.connect(server, user, password, database='DataSave') # 获取连接
  12. cursor = conn.cursor() # 获取游标
  13. # "**ENGINE=InnoDB DEFAULT CHARSET=utf8**"-创建表的过程中增加这条,中文就不是乱码
  14. # 创建表
  15. cursor.execute ("""
  16. CREATE TABLE if not exists lamp_result(
  17. result_id INT NOT NULL auto_increment primary key,
  18. product_number VARCHAR(100),
  19. record_time VARCHAR(100),
  20. lamp_color INT NOT NULL,
  21. detect_result VARCHAR(100),
  22. old_pic_path VARCHAR(100),
  23. result_pic_path VARCHAR(100)
  24. )
  25. ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
  26. """)
  27. # 查询数据
  28. cursor.execute('SELECT * FROM lamp_result')
  29. row = cursor.fetchone()
  30. print(row)
  31. # cursor.execute("INSERT INTO user VALUES('%d', '%s','%s','%s','%s')" % ('xiaoming','qwe','ming','@163.com'))
  32. # 提交数据,才会写入表格
  33. conn.commit()
  34. # 关闭游标关闭数据库
  35. cursor.close()
  36. conn.close()
  37.  

2. 数据存储


 
  1. """
  2. Created on 19-10-22
  3. @author: apple
  4. @requirement:Anaconda 4.3.0 (64-bit) Python3.6
  5. @description:数据存储
  6. """
  7. from sqlalchemy.exc import SQLAlchemyError
  8. from sqlalchemy.ext.declarative import declarative_base
  9. from sqlalchemy import Column, String, Integer, create_engine
  10. from sqlalchemy.orm import sessionmaker
  11. Base = declarative_base()
  12. # 连接数据库
  13. # alter table students convert to character set utf8;
  14. conn = "mysql+pymysql://root:password@0.0.0.0:3306/DataSave"
  15. engine = create_engine(conn, encoding='UTF8', echo=False) # echo=True 打印日志
  16. # 创建session对象
  17. Session = sessionmaker(bind=engine)
  18. session = Session()
  19. # 数据库表模型ORM
  20. class DataSaveSystem(Base):
  21. """
  22. 员工自助信息采集系统
  23. """
  24. __tablename__ = 'lamp_result' # 定义表名
  25. # 定义列名
  26. result_id = Column(Integer, primary_key=True, autoincrement=True, nullable=False)
  27. product_number = Column(String(50), nullable=True)
  28. record_time = Column(String(50), nullable=False)
  29. lamp_color = Column(Integer, nullable=False)
  30. detect_result = Column(String(100), nullable=False)
  31. old_pic_path = Column(String(100), nullable=False)
  32. result_pic_path = Column(String(100), nullable=False)
  33. def __repr__(self):
  34. """
  35. 引用该类别,输出结果
  36. :return:
  37. """
  38. return str(self.__dict__)
  39. # return '<detect_result:{}>'.format(self.detect_result)
  40. # 插入数据
  41. def insert_to_db(product_number=None, record_time=None, lamp_color=None,
  42. detect_result=None, old_pic_path=None, result_pic_path=None):
  43. '''
  44. :param product_number: 产品编号
  45. :param record_time: 取原图时间
  46. :param lamp_color: 灯的颜色:1 2 3 4
  47. :param detect_result: 检测结果
  48. :param old_pic_path: 原图路径
  49. :param result_pic_path: 结果图路径
  50. :return: 数据是否写入成功
  51. '''
  52. information_system_instance = DataSaveSystem(
  53. product_number=product_number,
  54. record_time=record_time,
  55. lamp_color=lamp_color,
  56. detect_result=detect_result,
  57. old_pic_path=old_pic_path,
  58. result_pic_path=result_pic_path)
  59. # session.add_all([
  60. # lamp_result(id=2, name="张2", age=19),
  61. # lamp_result(id=3, name="张3", age=20)
  62. # ])
  63. session.add(information_system_instance)
  64. try:
  65. session.commit() # 尝试提交数据库事务
  66. # print('数据库数据提交成功')
  67. return {
  68. "code": 200,
  69. "status": True,
  70. "message": "写入数据库成功",
  71. }
  72. except SQLAlchemyError as e:
  73. session.rollback()
  74. print(e)
  75. return {
  76. "code": 500,
  77. "status": False,
  78. "message": str(e)
  79. }
  80. # url = "mysql+pymysql://root:password@0.0.0.1:3306/DataSave"
  81. # # echo为True时,打印sql,可用于调试
  82. # engine = create_engine(url, echo=False, encoding='utf-8', pool_size=5)
  83. # sessionClass = sessionmaker(bind=engine)
  84. # # 创建会话
  85. # session = sessionClass()
  86. # # 查所有,并排序
  87. # stuList = session.query(DataSaveSystem).order_by(DataSaveSystem.result_id).all()
  88. # print(stuList)
  89. #
  90. stu = DataSaveSystem(product_number='id1',
  91. record_time='20191022170400',
  92. lamp_color='1',
  93. detect_result='ok',
  94. old_pic_path='picture/',
  95. result_pic_path='d')
  96. # session.add(stu)
  97. stuList = [DataSaveSystem(product_number='id1',
  98. record_time='20191022170400',
  99. lamp_color='1',
  100. detect_result='ok',
  101. old_pic_path='picture/',
  102. result_pic_path='d'),
  103. DataSaveSystem(product_number='id1',
  104. record_time='20191022170400',
  105. lamp_color='1',
  106. detect_result='ok',
  107. old_pic_path='picture/',
  108. result_pic_path='d')]
  109. # session.add_all(stuList)
  110. # session.commit()
  111. # print('数据成功')
  112. if __name__ == '__main__':
  113. result = insert_to_db(stu)
  114. print(result)
  115.  

3.数据函数调用


 
  1. """
  2. Created on 19-10-31
  3. @author: apple
  4. @requirement:Anaconda 4.3.0 (64-bit) Python3.6
  5. @description:调取函数基类
  6. """
  7. from data_sql.airconditioning_lamp_datasave.datasave import DataSaveSystem
  8. from sqlalchemy.exc import SQLAlchemyError
  9. from sqlalchemy.ext.declarative import declarative_base
  10. from sqlalchemy import Column, String, Integer, create_engine
  11. from sqlalchemy.orm import sessionmaker
  12. Base = declarative_base()
  13. # 连接数据库
  14. # alter table students convert to character set utf8;
  15. conn = "mysql+pymysql://root:password@0.0.0.1:3306/DataSave"
  16. engine = create_engine(conn, encoding='UTF8', echo=False) # echo=True 打印日志
  17. # 创建session对象
  18. Session = sessionmaker(bind=engine)
  19. session = Session()
  20. stuList = [DataSaveSystem(product_number='id1',
  21. record_time='20191022170400',
  22. lamp_color='1',
  23. detect_result='ok',
  24. old_pic_path='picture/',
  25. result_pic_path='F'),
  26. DataSaveSystem(product_number='id1',
  27. record_time='20191022170400',
  28. lamp_color='1',
  29. detect_result='ok',
  30. old_pic_path='picture/',
  31. result_pic_path='F'),DataSaveSystem(product_number='id1',
  32. record_time='20191022170400',
  33. lamp_color='1',
  34. detect_result='ok',
  35. old_pic_path='picture/',
  36. result_pic_path='F'),DataSaveSystem(product_number='id1',
  37. record_time='20191022170400',
  38. lamp_color='1',
  39. detect_result='ok',
  40. old_pic_path='picture/',
  41. result_pic_path='F')]
  42. session.add_all(stuList)
  43. session.commit()
  44. print('数据成功')
  45. # # 根据主建查询数据
  46. # result = session.query(DataSaveSystem).get(3)
  47. # print(result.old_pic_path)
  48. # # 查询第一条
  49. # result = session.query(DataSaveSystem).first()
  50. # print(result) #打印对象属性
  51. # 查询表关键字的数据
  52. result = session.query(DataSaveSystem).filter_by(result_pic_path='a/').first()
  53. print(result)
  54. #修改
  55. session.query(DataSaveSystem).filter(DataSaveSystem.result_pic_path=='a/').update({"detect_result":"不合格"})
  56. session.commit()
  57.  

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python常见数据库操作技巧汇总》、《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载