python基于SQLAlchemy的DBtools
新版,只创建一次线程池
# -*- coding: utf-8 -*-
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker from taskcenter.config import config def create_pool():
dbconfig = config.GetConfig().get('database')
dbusr = dbconfig["dbusr"]
dbpasswd = dbconfig["dbpasswd"]
dburl = dbconfig["dbhost"] + ":" + dbconfig["dbport"]
dbname = dbconfig["dbname"]
#pymysql驱动在mysql5.7时会报warning mysql 1366,使用mysqlconnector代替pymysql ,mysql+pymysql://{}:{}@{}/{}
engine = create_engine("mysql+mysqlconnector://{}:{}@{}/{}".format(dbusr, dbpasswd, dburl, dbname),
max_overflow=0, # 超过连接池大小外最多创建的连接
pool_size=5, # 连接池大小
pool_timeout=30, # 池中没有线程最多等待的时间,否则报错
pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置)
)
print("创建了一次pool")
return engine
# metaclass实现单例模式
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls] class GetEngine(metaclass=Singleton):
def __init__(self):
self.engine = create_pool() # 全局变量模式实现单例,但是不支持编译,注释掉
# engine = create_pool() def create_session_factory():
DBsession = sessionmaker(bind=GetEngine().engine)
return DBsession def get_session():
DBsessionfactory = create_session_factory()
return DBsessionfactory()
# 执行sql,返回第i+1列的字段数组,paramdict为补全sql里的占位符
def executeSqlFieldList(sqlstr, paramdict, i):
resultList = []
dbsession = get_session()
try:
dataQuery = dbsession.execute(sqlstr, paramdict).fetchall()
for data in dataQuery:
tempdata = list(data)[i]
if tempdata is None:
continue
resultList.append(tempdata)
return resultList
finally:
dbsession.close()
代码如下:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker BIZ_DB = {"dbusr":"test","dbpasswd":"","dburl":"127.0.0.1:3306","dbname":"test"}
OFFLINE_DB = {"dbusr":"test","dbpasswd":"","dburl":"127.0.0.1:3306","dbname":"test"} def create_session(dbusr,dbpasswd,dburl,dbname):
engine = create_engine("mysql+pymysql://{}:{}@{}/{}".format(dbusr,dbpasswd,dburl,dbname))
DBsession = sessionmaker(bind=engine)
session = DBsession()
return session def create_session_biz():
dbusr = BIZ_DB["dbusr"]
dbpasswd = BIZ_DB["dbpasswd"]
dburl = BIZ_DB["dburl"]
dbname = BIZ_DB["dbname"]
return create_session(dbusr,dbpasswd,dburl,dbname) def create_session_offline():
dbusr = OFFLINE_DB["dbusr"]
dbpasswd = OFFLINE_DB["dbpasswd"]
dburl = OFFLINE_DB["dburl"]
dbname = OFFLINE_DB["dbname"]
return create_session(dbusr, dbpasswd, dburl, dbname)
python基于SQLAlchemy的DBtools的更多相关文章
- 基于Python的SQLAlchemy的操作
安装 在Python使用SQLAlchemy的首要前提是安装相应的模块,当然作为python的优势,可以到python安装目录下的scripts下,同时按住shift+加上鼠标左键,从而在菜单中打开命 ...
- 【Python】 SQLAlchemy的初步使用
SQLAlchemy 在很多Python的web框架中都整合进了SQLAlchemy这个主要发挥ORM作用的模块.所谓ORM,就是把复杂的SQL语句给包装成更加面向对象,易于理解的样子.在操作数据库的 ...
- python基于LeanCloud的短信验证
python基于LeanCloud的短信验证 1. 获取LeanCloud的Id.Key 2. 安装Flask框架和Requests库 pip install flask pip install re ...
- Python基于共现提取《釜山行》人物关系
Python基于共现提取<釜山行>人物关系 一.课程介绍 1. 内容简介 <釜山行>是一部丧尸灾难片,其人物少.关系简单,非常适合我们学习文本处理.这个项目将介绍共现在关系中的 ...
- Python 基于Python实现的ssh兼sftp客户端(上)
基于Python实现的ssh兼sftp客户端 by:授客 QQ:1033553122 实现功能 实现ssh客户端兼ftp客户端:实现远程连接,执行linux命令,上传下载文件 测试环境 Win7 ...
- SQLAlchemy(1) -- Python的SQLAlchemy和ORM
Python的SQLAlchemy和ORM(object-relational mapping:对象关系映射) web编程中有一项常规任务就是创建一个有效的后台数据库.以前,程序员是通过写sql语句, ...
- python使用sqlalchemy连接pymysql数据库
python使用sqlalchemy连接mysql数据库 字数833 阅读461 评论0 喜欢1 sqlalchemy是python当中比较出名的orm程序. 什么是orm? orm英文全称objec ...
- Python基于socket模块实现UDP通信功能示例
Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端 import ...
- Python基于正则表达式实现文件内容替换的方法
Python基于正则表达式实现文件内容替换的方法 本文实例讲述了Python基于正则表达式实现文件内容替换的方法.分享给大家供大家参考,具体如下: 最近因为有一个项目需要从普通的服务器移植到SAE,而 ...
随机推荐
- OO作业第二单元总结
目录 一.设计策略 1 2 3 二.程序分析 1 2 3 S.O.L.I.D分析 三.Bug分析 1 2 3 四.互测策略 五.心得体会 一.设计策略 1 第一次完成的是一个傻瓜电梯,简单来说,就是来 ...
- HTML5<figure>元素
HTML5<figure>元素是用来定义页面文档中独立的流内容(图像,图表,照片,代码块),figure内容与主内容有关,如果被删除,则不影响主文档流的产生. HTML5<figca ...
- 第四次作业:Windows各种基本应用的命令处理方法
删除文件夹命令? rd (remove directory) 如何给文件夹重新命名? ren (rename) 如何在文件夹中建立文件夹? md swift\a 如何用命令查看文本文件的内容? typ ...
- CF-629 D - Babaei and Birthday Cake (离散化 + 线段树|树状数组)
求上升子序列的最大和.O(n^2)会暴力,在查询的时候要用线段树维护 因为权值是浮点数,故先离散化一下,设第 i 个位置的权值,从小到大排名为 id.那么dp转移中 \[d[i] = max(d[i] ...
- linux系统防火墙关闭
临时关闭防火墙 #systemctl stop firewalld 永久关闭服务端防火墙 #systemctl disabled firewalld getenforce 查询状态 临时 ...
- Python + Bottle + 谷歌搜索Api 实现简单搜索引擎
1.运行环境 python3 centos7 2.Bottle的使用 使用bottle主要是因为它仅用python自带的库即可实现对web的搭建. bottle源码分析 bottle使用教程 3.代码 ...
- Linux-Java安装
安装 yum -y install java-1.8.0-openjdk* Tomcat安装:到官网http://tomcat.apache.org/,然后找到Tomcat9下载地址 http://m ...
- kali下安装中文输入法
参考网址:https://blog.csdn.net/qq_37367124/article/details/79229739 更性源 vim /etc/apt/source.list 设置更新源 更 ...
- PHP函数详解:call_user_func()使用方法
call_user_func函数类似于一种特别的调用函数的方法,使用方法如下: <?php function nowamagic($a,$b) { echo $a; echo $b; } cal ...
- destoon 信息发布表单提交验证
sell 模块的form表单如下: <form method="post" id="dform" action="?" target= ...