Flask框架使用Pyodbc连接SqlServer数据库并封装使用

【参考Pyodbc使用: https://code.google.com/archive/p/pypyodbc/wikis/A_HelloWorld_sample_to_access_mssql_with_python.wiki

【windows版本的 python在刚刚对接pyodbc的时候可能会有一些问题,请参考另一篇文章:https://blog.csdn.net/qq_36622490/article/details/104038680 】

 

使用Pyodbc的优点:

  1. 可以使用sql语句,提高效率
  2. 简便,自由,可以随意封装组合

使用Pyodbc的缺点:

  1. 网上中文资料不多,需要自己去查找翻译
  2. 对开发人员要求稍高,需要考虑东西多

 

为了省钱,公司在Azure服务器上把oracle换了sqlserver数据库,为了封装pyodbc数据库连接,自己摸索了几天在google和百度上一直查找,期间也通过app,current_app,g这些上下文对象和应用变量来存储,但是效果都不太满意。老大给我定的目标是,查询都使用一个连接,不同的cursor游标就行了 ,防止反复查询连接数据库影响性能。最后无奈自己尝试封装了一个,贴上项目目录。

import pyodbc

class MyDb:
    """以面向对象方式封装数据库和数据库连接"""
    server = '服务器地址' # 端口在init函数中直接1433初始化了,可以自己适当改变
    database = '数据库名字'
    username = '登录用户名'
    password = '登录密码'
    driver = '{驱动名字}' 
   #驱动名字 我再windows上用的是17版本的所以我的是‘ODBC Driver 17 for SQL Server’
    def __init__(self):
        # 获取数据库连接和游标
        self.conn = pyodbc.connect('SERVER=' + self.server + ';PORT=1433;DATABASE=' + self.database + ';UID=' + self.username + ';PWD=' + self.password + ';DRIVER=' + self.driver)
        self.db = self.conn
        self.cur = self.db.cursor()

    def select_db(self, sql_code):
        # 查询sql数据
        self.cur.execute(sql_code)
        return self.cur.fetchall()

    def __del__(self):
        # 对象销毁,断开连接
        self.cur.close()
        self.db.close()

我个人理解的是,在不同的api蓝图初始化的时候就对数据库连接进行初始化,然后就是用这个初始化过后的连接进行创建游标和数据查询,而数据库和游标关闭直接在这个封装的MyDb类中操作,这个蓝图对象销毁的时候就自动断开数据库和游标的连接。【不明白python对象的销毁的可以去查一下python的对象销毁机制】

 

在蓝图对象中如下,将数据库的连接直接存储到蓝图对象里面,这样也不会影响其他蓝图数据库连接和游标。

 

测试之后可以在Console上看到,输出的连接对象的地址都是一样的,上面哪些不一样是因为在期间我重启了下项目,所以同一个蓝图对象的时候,连接对象就是同一个,游标不能用同一个。【一个连接一次只能有一个游标的查询处于活跃状态】

 

下面是我的项目目录,特别简单的一个Flask框架,Flask的简介真的不是盖的,随便自己扩展,但是就是比较麻烦,需要自己封装大量的工具和功能,而且好多工具都不是现存的,需要查阅大量资料。有些欠缺的还有就是Python的Web运行速度比较慢,在windowsServer上运行的时候dos窗口上有时候会莫名其妙需要请求两次才可以收到数据。

接下来我会跟着这个项目,把Flask再温习一下,遇到问题之后再记录,共学习。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值