本文实例讲述了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.建表
""" Created on 19-10-22 @author: apple @description:建表 """ import pymysql server = '127.0.0.1' user = 'root' # dev password = '123456' conn = pymysql.connect(server, user, password, database='DataSave') # 获取连接 cursor = conn.cursor() # 获取游标 # "**ENGINE=InnoDB DEFAULT CHARSET=utf8**"-创建表的过程中增加这条,中文就不是乱码 # 创建表 cursor.execute (""" CREATE TABLE if not exists lamp_result( result_id INT NOT NULL auto_increment primary key, product_number VARCHAR(100), record_time VARCHAR(100), lamp_color INT NOT NULL, detect_result VARCHAR(100), old_pic_path VARCHAR(100), result_pic_path VARCHAR(100) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 """) # 查询数据 cursor.execute('SELECT * FROM lamp_result') row = cursor.fetchone() print(row) # cursor.execute("INSERT INTO user VALUES('%d', '%s','%s','%s','%s')" % ('xiaoming','qwe','ming','@163.com')) # 提交数据,才会写入表格 conn.commit() # 关闭游标关闭数据库 cursor.close() conn.close()
2. 数据存储
""" Created on 19-10-22 @author: apple @requirement:Anaconda 4.3.0 (64-bit) Python3.6 @description:数据存储 """ from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, String, Integer, create_engine from sqlalchemy.orm import sessionmaker Base = declarative_base() # 连接数据库 # alter table students convert to character set utf8; conn = "mysql+pymysql://root:password@0.0.0.0:3306/DataSave" engine = create_engine(conn, encoding='UTF8', echo=False) # echo=True 打印日志 # 创建session对象 Session = sessionmaker(bind=engine) session = Session() # 数据库表模型ORM class DataSaveSystem(Base): """ 员工自助信息采集系统 """ __tablename__ = 'lamp_result' # 定义表名 # 定义列名 result_id = Column(Integer, primary_key=True, autoincrement=True, nullable=False) product_number = Column(String(50), nullable=True) record_time = Column(String(50), nullable=False) lamp_color = Column(Integer, nullable=False) detect_result = Column(String(100), nullable=False) old_pic_path = Column(String(100), nullable=False) result_pic_path = Column(String(100), nullable=False) def __repr__(self): """ 引用该类别,输出结果 :return: """ return str(self.__dict__) # return '<detect_result:{}>'.format(self.detect_result) # 插入数据 def insert_to_db(product_number=None, record_time=None, lamp_color=None, detect_result=None, old_pic_path=None, result_pic_path=None): ''' :param product_number: 产品编号 :param record_time: 取原图时间 :param lamp_color: 灯的颜色:1 2 3 4 :param detect_result: 检测结果 :param old_pic_path: 原图路径 :param result_pic_path: 结果图路径 :return: 数据是否写入成功 ''' information_system_instance = DataSaveSystem( product_number=product_number, record_time=record_time, lamp_color=lamp_color, detect_result=detect_result, old_pic_path=old_pic_path, result_pic_path=result_pic_path) # session.add_all([ # lamp_result(id=2, name="张2", age=19), # lamp_result(id=3, name="张3", age=20) # ]) session.add(information_system_instance) try: session.commit() # 尝试提交数据库事务 # print('数据库数据提交成功') return { "code": 200, "status": True, "message": "写入数据库成功", } except SQLAlchemyError as e: session.rollback() print(e) return { "code": 500, "status": False, "message": str(e) } # url = "mysql+pymysql://root:password@0.0.0.1:3306/DataSave" # # echo为True时,打印sql,可用于调试 # engine = create_engine(url, echo=False, encoding='utf-8', pool_size=5) # sessionClass = sessionmaker(bind=engine) # # 创建会话 # session = sessionClass() # # 查所有,并排序 # stuList = session.query(DataSaveSystem).order_by(DataSaveSystem.result_id).all() # print(stuList) # stu = DataSaveSystem(product_number='id1', record_time='20191022170400', lamp_color='1', detect_result='ok', old_pic_path='picture/', result_pic_path='d') # session.add(stu) stuList = [DataSaveSystem(product_number='id1', record_time='20191022170400', lamp_color='1', detect_result='ok', old_pic_path='picture/', result_pic_path='d'), DataSaveSystem(product_number='id1', record_time='20191022170400', lamp_color='1', detect_result='ok', old_pic_path='picture/', result_pic_path='d')] # session.add_all(stuList) # session.commit() # print('数据成功') if __name__ == '__main__': result = insert_to_db(stu) print(result)
3.数据函数调用
""" Created on 19-10-31 @author: apple @requirement:Anaconda 4.3.0 (64-bit) Python3.6 @description:调取函数基类 """ from data_sql.airconditioning_lamp_datasave.datasave import DataSaveSystem from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, String, Integer, create_engine from sqlalchemy.orm import sessionmaker Base = declarative_base() # 连接数据库 # alter table students convert to character set utf8; conn = "mysql+pymysql://root:password@0.0.0.1:3306/DataSave" engine = create_engine(conn, encoding='UTF8', echo=False) # echo=True 打印日志 # 创建session对象 Session = sessionmaker(bind=engine) session = Session() stuList = [DataSaveSystem(product_number='id1', record_time='20191022170400', lamp_color='1', detect_result='ok', old_pic_path='picture/', result_pic_path='F'), DataSaveSystem(product_number='id1', record_time='20191022170400', lamp_color='1', detect_result='ok', old_pic_path='picture/', result_pic_path='F'),DataSaveSystem(product_number='id1', record_time='20191022170400', lamp_color='1', detect_result='ok', old_pic_path='picture/', result_pic_path='F'),DataSaveSystem(product_number='id1', record_time='20191022170400', lamp_color='1', detect_result='ok', old_pic_path='picture/', result_pic_path='F')] session.add_all(stuList) session.commit() print('数据成功') # # 根据主建查询数据 # result = session.query(DataSaveSystem).get(3) # print(result.old_pic_path) # # 查询第一条 # result = session.query(DataSaveSystem).first() # print(result) #打印对象属性 # 查询表关键字的数据 result = session.query(DataSaveSystem).filter_by(result_pic_path='a/').first() print(result) #修改 session.query(DataSaveSystem).filter(DataSaveSystem.result_pic_path=='a/').update({"detect_result":"不合格"}) session.commit()
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python常见数据库操作技巧汇总》、《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
更新日志
2024年11月25日
2024年11月25日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]