Python之数据库(表)对应SQLAlchemy模型

30 篇文章 0 订阅


前言

最近想在服务器上用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,建个新任务指向这批次处理文件


总结

记录点点滴滴

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

panda_225400

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值