Flask框架使用DBUtils模块连接数据库 *** 作示例

Flask框架使用DBUtils模块连接数据库 *** 作示例,第1张

概述本文实例讲述了Flask框架使用DBUtils模块连接数据库的 *** 作方法。分享给大家供大家参考,具体如下:

本文实例讲述了Flask框架使用dbutils模块连接数据库的 *** 作方法。分享给大家供大家参考,具体如下:

Flask连接数据库

数据库连接池:

Django使用:django ORM(pyMysqL/MysqLdb)

Flask/其他使用:

    -原生sql
        -pyMysqL(支持python2/3)
        -MysqLdb(支持python2)
    -sqlAchemy(ORM)

原生sql

需要解决的问题:

        -不能为每个用户创建一个连接
        -创建一定数量的连接池,如果有人来

使用dbutils模块

两种使用模式:

    1 为每个线程创建一个连接,连接不可控,需要控制线程数
    2 创建指定数量的连接在连接池,当线程访问的时候去取,如果不够了线程排队,直到有人释放。平时建议使用这种!!!

模式一:

import pyMysqLfrom dbutils.PersistentDB import PersistentDBPOol = PersistentDB(  creator=pyMysqL,# 使用链接数据库的模块  maxusage=None,# 一个链接最多被重复使用的次数,None表示无限制  setsession=[],# 开始会话前执行的命令列表。如:["set datestyle to ...","set time zone ..."]  Ping=0,# Ping MysqL服务端,检查是否服务可用。# 如:0 = None = never,1 = default = whenever it is requested,2 = when a cursor is created,4 = when a query is executed,7 = always  closeable=False,# 建议为False,如果为False时, conn.close() 实际上被忽略,供下次使用,再线程关闭时,才会自动关闭链接。如果为True时, conn.close()则关闭链接,那么再次调用pool.connection时就会报错,因为已经真的关闭了连接(pool.steady_connection()可以获取一个新的链接)  threadlocal=None,# 本线程独享值得对象,用于保存链接对象,如果链接对象被重置  host='127.0.0.1',port=3306,user='root',password='123',database='pooldb',charset='utf8')def func():  conn = POol.connection(shareable=False)  cursor = conn.cursor()  cursor.execute('select * from tb1')  result = cursor.fetchall()  cursor.close()  conn.close()func()

模式二(推荐):

import timeimport pyMysqLimport threadingfrom dbutils.PooledDB import PooledDB,SharedDBConnectionPOol = PooledDB(  creator=pyMysqL,# 使用链接数据库的模块  maxconnections=6,# 连接池允许的最大连接数,0和None表示不限制连接数  mincached=2,# 初始化时,链接池中至少创建的空闲的链接,0表示不创建  maxcached=5,# 链接池中最多闲置的链接,0和None不限制  maxshared=3,# 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pyMysqL和MysqLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。  blocking=True,# 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错  maxusage=None,7 = always  host='127.0.0.1',charset='utf8')def func():  # 检测当前正在运行连接数的是否小于最大链接数,如果不小于则:等待或报raise TooManyConnections异常  # 否则  # 则优先去初始化时创建的链接中获取链接 SteadyDBConnection。  # 然后将SteadyDBConnection对象封装到PooledDedicatedDBConnection中并返回。  # 如果最开始创建的链接没有链接,则去创建一个SteadyDBConnection对象,再封装到PooledDedicatedDBConnection中并返回。  # 一旦关闭链接后,连接就返回到连接池让后续线程继续使用。  conn = POol.connection()  # print(th,'链接被拿走了',conn1._con)  # print(th,'池子里目前有',pool._IDle_cache,'\r\n')  cursor = conn.cursor()  cursor.execute('select * from tb1')  result = cursor.fetchall()  conn.close()func()

具体写法:

通过导入的方式

app.py

from flask import Flaskfrom db_helper import sqlHelperapp = Flask(__name__)@app.route("/")def hello():  result = sqlHelper.fetch_one('select * from xxx',[])  print(result)  return "Hello World"if __name__ == '__main__':  app.run()

dbutils

以下为两种写法:

第一种是用静态方法装饰器,通过直接执行类的方法来连接使用数据库

第二种是通过实例化对象,通过对象来调用方法执行语句

建议使用第一种,更方便,第一种还可以在修改优化为,将一些公共语句在摘出来使用。

import timeimport pyMysqLfrom dbutils.PooledDB import PooledDBPOol = PooledDB(  creator=pyMysqL,charset='utf8')"""class sqlHelper(object):  @staticmethod  def fetch_one(sql,args):    conn = POol.connection()    cursor = conn.cursor()    cursor.execute(sql,args)    result = cursor.fetchone()    conn.close()    return result  @staticmethod  def fetch_all(self,sql,args)    result = cursor.fetchone()    conn.close()    return result# 调用方式:result = sqlHelper.fetch_one('select * from xxx',[])print(result)""""""#第二种:class sqlHelper(object):  def __init__(self):    self.conn = POol.connection()    self.cursor = self.conn.cursor()  def close(self):    self.cursor.close()    self.conn.close()  def fetch_one(self,args):    self.cursor.execute(sql,args)    result = self.cursor.fetchone()    self.close()    return result  def fetch_all(self,args)    result = self.cursor.fetchall()    self.close()    return resultobj = sqlHelper()obj.fetch_one()"""

希望本文所述对大家基于Flask框架的Python程序设计有所帮助。

您可能感兴趣的文章:原生JS实现Ajax跨域请求flask响应内容flask中使用蓝图将路由分开写在不同文件实例解析Flask框架URL管理 *** 作示例【基于@app.route】Flask框架配置与调试 *** 作示例Flask框架Flask-Principal基本用法实例分析Flask框架Flask-Login用法分析详解flask表单提交的两种方式Flask-Mail用法实例分析Python Web框架Flask下网站开发入门实例Python的Flask框架中@app.route的用法教程Flask框架响应、调度方法和蓝图 *** 作实例分析 总结

以上是内存溢出为你收集整理的Flask框架使用DBUtils模块连接数据库 *** 作示例全部内容,希望文章能够帮你解决Flask框架使用DBUtils模块连接数据库 *** 作示例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1204626.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存