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标准库defaultdict模块使用示例
Apr 28 Python
Python数据分析之双色球中蓝红球分析统计示例
Feb 03 Python
python Flask 装饰器顺序问题解决
Aug 08 Python
详解PyCharm配置Anaconda的艰难心路历程
Aug 13 Python
python中类的属性和方法介绍
Nov 27 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
Jul 25 Python
超实用的 30 段 Python 案例
Oct 10 Python
Python JSON编解码方式原理详解
Jan 20 Python
tensorflow求导和梯度计算实例
Jan 23 Python
Python confluent kafka客户端配置kerberos认证流程详解
Oct 12 Python
Python读取图像并显示灰度图的实现
Dec 01 Python
基于tensorflow权重文件的解读
May 26 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版(1)
2006/10/09 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
Redis构建分布式锁
2017/03/28 PHP
基于php流程控制语句和循环控制语句(讲解)
2017/10/23 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
九种js弹出对话框的方法总结
2013/03/12 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
Bootstrap栅格系统简单实现代码
2017/03/06 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
js 概率计算(简单版)
2017/09/12 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
three.js中文文档学习之通过模块导入
2017/11/20 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
Ant design vue中的联动选择取消操作
2020/10/31 Javascript
初学python数组的处理代码
2011/01/04 Python
linux 下实现python多版本安装实践
2014/11/18 Python
Python2.x中文乱码问题解决方法
2015/06/02 Python
使用python遍历指定城市的一周气温
2017/03/31 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
学python最电脑配置有要求么
2020/07/05 Python
Python命名空间及作用域原理实例解析
2020/08/12 Python
python 常用日期处理-- datetime 模块的使用
2020/09/02 Python
如何利用Python 进行边缘检测
2020/10/14 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
英国最大的电脑零售连锁店集团:PC World
2016/10/10 全球购物
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
物流专业毕业生推荐信范文
2013/11/18 职场文书
木工主管岗位职责
2013/12/08 职场文书
《卖木雕的少年》教学反思
2014/04/11 职场文书
团支部建设方案
2014/05/02 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python
Redis 哨兵机制及配置实现
2022/03/25 Redis
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers