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,而 ...
随机推荐
- 2018.4.3 Linux环境变量与变量
环境变量与变量 shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,用户还可以重新定义这些变量. 环境变量可用命令env或set来查询.(DOS环境为set) 环境变量查询与显示 env ...
- linux readahead
blockdev --getra /dev/sda blockdev --setra 2048 /dev/sda 必须将其写入配置文件/etc/rc.local,否则重启就会失效.[root@loca ...
- vue跨域处理(vue项目中baseUrl设置问题)
1.开发环境: 2.生产环境: 然后 const instance = axios.create({ baseURL: process.env.API })
- A. Vitya in the Countryside
A. Vitya in the Countryside time limit per test 1 second memory limit per test 256 megabytes input s ...
- IntelliJ IDEA 配置 Tomcat 运行web项目
运行前提: 配置好 Java 的运行环境 配置好 Tomcat 安装 IntelliJ IDEA 开始 1.创建项目并配置 关于配置SDK,等建完项目再说 没有配置SDK的话 会出现下面的弹框,点击 ...
- Golang tcp转发 remoteAddr错误
Golang tcp 转发 第一版本 accept获取的Conn里的localAddr做为源地址,remoteAddr来做为目的地址 // tcpForward package main import ...
- 如何用纯 CSS 创作一个行驶中的火车 loader
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/RBLWzJ 可交互视频 ...
- German Collegiate Programming Contest 2018
// Coolest Ski Route #include <iostream> #include <cstdio> #include <cstring> #inc ...
- 同一条sql在mysql5.6和5.7版本遇到的问题。
之前用的是mysql 5.6版本,执行select * from table group by colunm 是可以出结果的, 但是切换的5.7版本,这条sql就报错, Expression #1 o ...
- 离线安装eclipse maven插件
最近用到maven,所以按照官网http://www.eclipse.org/m2e/的教程http://download.eclipse.org/technology/m2e/releases/,在 ...