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 NumPy库安装使用笔记
May 18 Python
在Django框架中设置语言偏好的教程
Jul 27 Python
python中的随机函数小结
Jan 27 Python
解决Pycharm无法import自己安装的第三方module问题
May 18 Python
一行代码让 Python 的运行速度提高100倍
Oct 08 Python
Windows系统下PhantomJS的安装和基本用法
Oct 21 Python
python中栈的原理及实现方法示例
Nov 27 Python
Python正则表达式急速入门(小结)
Dec 16 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
Mar 13 Python
python3.4中清屏的处理方法
Jul 06 Python
python进行二次方程式计算的实例讲解
Dec 06 Python
python中doctest库实例用法
Dec 31 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
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
详解PHP显示MySQL数据的三种方法
2008/06/05 PHP
php set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
深入探讨前端框架react
2015/12/09 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
2016/05/23 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
移动端效果之Swiper详解
2017/10/09 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
浅谈python中set使用
2016/06/30 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
python中如何使用正则表达式的集合字符示例
2017/10/09 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
python将print输出的信息保留到日志文件中
2019/09/27 Python
python烟花效果的代码实例
2020/02/25 Python
爬虫代理的cookie如何生成运行
2020/09/22 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
html5服务器推送_动力节点Java学院整理
2017/07/12 HTML / CSS
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
软件测试企业面试试卷
2016/07/13 面试题
95%的面试官都会问到的50道Java线程题,附答案
2012/08/03 面试题
食品安全工作实施方案
2014/03/26 职场文书
走进敬老院活动总结
2014/07/10 职场文书
安全生产标语大全
2014/10/06 职场文书
2015年读书月活动总结
2015/03/26 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL