前言
最近想在服务器上用Python搞个定时从Oracle获取对应的数据,其他语言都有ORM不用编写SQL
提示:以下是本篇文章正文内容,下面案例可供参考
一、SQLAlchemy是什么?
SQLAlchemy 是 Python 著名的 ORM 工具包。通过 ORM,开发者可以用面向对象的方式来操作数据库,不再需要编写 SQL 语句。
二、使用步骤
1.引入库
Python 安装环境配置就不讲了
我使用的是Anaconda3-5.2.0-Windows-x86_64.exe
在线安装:
pip install cx_Oracle
pip install Flask-SQLAlchemy
或 pip install sqlalchemy
离线线安装:
https://pypi.python.org/pypi/SQLAlchemy
去这网址去找对应的离线包
pip install cx_Oracle-8.3.0-cp36-cp36m-win_amd64.whl
pip install SQLAlchemy-1.3.24-cp36-cp36m-win_amd64.whl
或 pip install Flask_SQLAlchemy-2.5.1-py2.py3-none-any.whl
2.代码生成
代码生成器:
#代码生成器
pip install sqlacodegen
pip install flask-sqlacodegen
代码如下(示例):
sqlacodegen oracle+cx_oracle://SCC_QA:Sc#1125@wboee.world --tables scc_ar_tbl --outfile=D:\models.py
flask-sqlacodegen oracle+cx_oracle://SCC_QA:Sc#1125@wboee.world --tables scc_ar_tbl --outfile=D:\model.py --flask
当你的表的字段缺少primary key或这张表是有两个外键约束的时候,会生成table而不是模型类了
3.代码结构
代码如下(示例):
代码如下(示例):
# coding: utf-8
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
#app = Flask(__name__)
#app.config.from_object('config')
db = SQLAlchemy()
#db = SQLAlchemy(app)
class SccArTbl(db.Model):
__tablename__ = 'scc_ar_tbl'
ar_app_id = db.Column(db.String(10), nullable=False)
ar_folio = db.Column(db.String(100), primary_key=True)
folio = db.Column(db.String(100), nullable=False)
ar_content = db.Column(db.String(1000))
ar_owner = db.Column(db.String(500))
ar_remark = db.Column(db.String(1000))
comments = db.Column(db.String(1000))
ar_owner_dept = db.Column(db.String(100))
due_date = db.Column(db.DateTime)
status = db.Column(db.String(50))
is_gating = db.Column(db.String(1), server_default=db.FetchedValue())
create_date = db.Column(db.DateTime, server_default=db.FetchedValue())
is_overdue = db.Column(db.String(1), server_default=db.FetchedValue())
create_user = db.Column(db.String(50))
gate_reviewer = db.Column(db.String(500))
priority = db.Column(db.String(1))
ar_app_desc = db.Column(db.String(50))
reviewer = db.Column(db.String(500))
update_user = db.Column(db.String(50))
update_time = db.Column(db.DateTime)
root_cause = db.Column(db.String(500))
preventive_action = db.Column(db.String(500))
class SccArTblDao(object):
def __init__(self,app):
self.db = SQLAlchemy(app)
def getlist(self,obj):
item_list = self.db.session.query(SccArTbl.create_date, SccArTbl.folio, SccArTbl.ar_owner, SccArTbl.status,
SccArTbl.ar_content).filter(
SccArTbl.ar_folio.like('{0}%'.format(obj.ar_folio)), SccArTbl.status != obj.status
).order_by(SccArTbl.create_date.desc()).all()
return item_list
代码如下(示例):
# coding: utf-8
import sys
sys.path.append("..") # 这代表添加当前路径的上一级目录
from flask import Flask
from MyDemos.MyEmails.model import SccArTblDao,SccArTbl
app = Flask(__name__)
app.config.from_object('MyEmails.config')
if __name__ == "__main__":
dal = SccArTblDao(app)
obj = SccArTbl()
obj.ar_folio="SMSTI"
obj.status="Closed"
item_list = dal.getlist(obj)
print("列表:",item_list)
# 申明集合
temp = set()
for item in item_list:
temp = temp | set(item.ar_owner.split(';'))
print(item.folio, item.ar_owner, list(temp))
print("合并:", temp)
newlist = [str(i) + "@jcetglobal.com" for i in list(temp)]
print("新列表:", newlist)
4.在windows服务器上执行定时任务
1、建个批处理文件
****.bat
2、打开服务器上Task Scheduler,建个新任务指向这批次处理文件
总结
记录点点滴滴