python orm 框架中sqlalchemy用法实例详解
作者:Dawn__Z 发布时间:2021-04-22 18:03:28
标签:python,orm框架,sqlalchemy
本文实例讲述了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程序设计有所帮助。
来源:https://blog.csdn.net/Dawn__Z/article/details/102834032
0
投稿
猜你喜欢
- Pywin32是一个Python库,为python提供访问Windows API的扩展,提供了齐全的windows常量、接口、线程以及COM
- 前言VScode是一个相当优秀的IDE,具备开源、跨平台、模块化、插件丰富、启动时间快、颜值高、可高度定制等等优秀的特质,不愧是微软爸爸的私
- 使用cv2.canny进行图像边缘检测CV2提供了提取图像边缘的函数canny。其算法思想如下:1.使用高斯模糊,去除噪音点(cv2.Gau
- 在下面这3篇文章中我们给出了手工输入代码的信号与槽的使用方法,因为采用这种方法介绍时,会简单一些,如果使用Qt Designer来介绍这些功
- python自定义异常实例详解 本文通过两种
- 本文实例讲述了python通过smpt发送邮件的方法。分享给大家供大家参考。具体实现方法如下:import smtplib, socketf
- 我就废话不多说了,直接上代码吧!import torchimport torch.nn.functional as Fimport nump
- 发邮件是一种很常见的操作,本篇主要介绍一下如何用python实现自动发件。import smtplibfrom email.mime.tex
- 本文介绍了asp编程中使用数组的各种方法,并给出了详细的asp实例代码方便大家理解。asp中数组的定义Dim MyArray My
- 新建label与button,并设置位置(grid)import tkinter as tkroot = tk.Tk()label = tk
- 首先我们载入一张灰度图片,一般灰度图片像素为0-255.可以发现该图片的最大像素为254,最小像素为2。一般处理图片时会转化为double类
- fileinput模块可以遍历文本文件的所有行.它的工作方式和readlines很类似,不同点在于,它不是将全部的行读到列表中而是创建了一个
- study.py内容如下#!/usr/bin/env python# -*- coding:utf-8 -*-__author__ =
- 设置自动的参数注释标识如何使用pycharm自动添加引用注释描述功能使用场景多行注释,且需要对传入的参数以及返回值进行详尽的阐述时,如下图设
- 前两天简单认识了一下PyQt5,通过练习开发了一款在Window下自定义关机的小工具,代码如下:import os,sys,timefrom
- 前记在Python中, Dict是一系列由键和值配对组成的元素的集合, 它是一个可变容器模型,可以存储任意类型对象. Dict的存取速度非常
- 简述公司使用gitlab 来托管代码,日常代码merge request 以及其他管理是交给测试,鉴于操作需经常打开网页,重复且繁琐,所以交
- 8大基础定位driver.find_element_by_id() # id定位driver.find_element_by_name()
- 首先水仙花数是什么?水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital inv
- 摘要:本文主要是在pandas中如何对字符串进行切分。我们考虑一下下面的应用场景。这个是我们的数据集(data),可以看到,数据集中某一列(