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 相关文章推荐
haskell实现多线程服务器实例代码
Nov 26 Python
Python六大开源框架对比
Oct 19 Python
Python全局变量用法实例分析
Jul 19 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
Jan 04 Python
python实现音乐下载器
Apr 15 Python
Python异常处理知识点总结
Feb 18 Python
python 弹窗提示警告框MessageBox的实例
Jun 18 Python
Python matplotlib学习笔记之坐标轴范围
Jun 28 Python
django中的图片验证码功能
Sep 18 Python
Python模拟FTP文件服务器的操作方法
Feb 18 Python
Python读取excel文件中带公式的值的实现
Apr 17 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 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 ignore_user_abort与register_shutdown_function 使用方法
2009/06/14 PHP
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
PHP队列用法实例
2014/11/05 PHP
PHP进程同步代码实例
2015/02/12 PHP
php实现mysql数据库分表分段备份
2015/06/18 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
2012/01/21 Javascript
Js数组排序函数sort()介绍
2015/06/08 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
用nodejs的实现原理和搭建服务器(动态)
2016/08/10 NodeJs
js图片轮播手动切换特效
2017/01/12 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
JS实现按钮添加背景音乐示例代码
2017/10/17 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
解决Vue.js由于延时显示了{{message}}引用界面的问题
2018/08/25 Javascript
Vue使用lodop实现打印小结
2019/07/06 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
Python中类的初始化特殊方法
2017/12/01 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
Python实现代码统计工具
2019/09/19 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
详解Anaconda 的安装教程
2020/09/23 Python
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
低碳环保口号
2014/06/12 职场文书
人事局接收函
2015/01/30 职场文书
2015年公务员试用期工作总结
2015/05/28 职场文书
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers