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


Posted in Python onFebruary 02, 2020

本文实例讲述了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和OpenCV库将URL转换为OpenCV格式的方法
Mar 27 Python
基于python实现微信模板消息
Dec 21 Python
python django 实现验证码的功能实例代码
May 18 Python
PyQt QListWidget修改列表项item的行高方法
Jun 20 Python
解决Python3 控制台输出InsecureRequestWarning问题
Jul 15 Python
使用Rasterio读取栅格数据的实例讲解
Nov 26 Python
Python partial函数原理及用法解析
Dec 11 Python
TensorFlow2.0矩阵与向量的加减乘实例
Feb 07 Python
Python数组并集交集补集代码实例
Feb 18 Python
初学者学习Python好还是Java好
May 26 Python
利用Python批量识别电子账单数据的方法
Feb 08 Python
python 实现mysql自动增删分区的方法
Apr 01 Python
使用Python操作ArangoDB的方法步骤
Feb 02 #Python
详解有关PyCharm安装库失败的问题的解决方法
Feb 02 #Python
Python 模拟生成动态产生验证码图片的方法
Feb 01 #Python
Python递归及尾递归优化操作实例分析
Feb 01 #Python
Python异步编程之协程任务的调度操作实例分析
Feb 01 #Python
python随机生成大小写字母数字混合密码(仅20行代码)
Feb 01 #Python
Python random模块制作简易的四位数验证码
Feb 01 #Python
You might like
用PHP读注册表
2006/10/09 PHP
Windows下的PHP5.0详解
2006/11/18 PHP
彻底搞懂PHP 变量结构体
2017/10/11 PHP
jQuery Tools tooltip使用说明
2012/07/14 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
React学习笔记之事件处理(二)
2017/07/02 Javascript
JS实现浏览上传文件的代码
2017/08/23 Javascript
jQuery+ajax读取json数据并按照价格排序示例
2018/03/28 jQuery
javaScript产生随机数的用法小结
2018/04/21 Javascript
Angular网络请求的封装方法
2018/05/22 Javascript
微信小程序 组件的外部样式externalClasses使用详解
2019/09/06 Javascript
vue实现移动端拖动排序
2020/08/21 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
2020/09/16 Javascript
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
python+os根据文件名自动生成文本
2019/03/21 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
python:按行读入,排序然后输出的方法
2019/07/20 Python
python中的itertools的使用详解
2020/01/13 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
高校辅导员推荐信范文
2013/12/25 职场文书
大学生职业生涯规划范文
2014/01/22 职场文书
教师学习培训邀请函
2014/02/04 职场文书
会计求职信范文
2014/05/24 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
会计求职自荐信
2015/03/26 职场文书
导游经典开场白——导游词
2019/04/17 职场文书
python flask框架快速入门
2021/05/14 Python