SqlAlchemy “Too many connections”
2019-06-12:真 有用的是这个:
https://blog.csdn.net/weiwangchao_/article/details/80185009
1、在使用 create_engine创建引擎时,如果默认不指定连接池设置的话,一般情况下,SQLAlchemy会使用一个 QueuePool绑定在新创建的引擎上。并附上合适的连接池参数。
2、在这种情况下,当你使用了session后就算显式地调用session.close(),也不能把连接关闭。连接会由QueuePool连接池进行管理并复用。
3、如果想禁用SQLAlchemy提供的数据库连接池,只需要在调用create_engine是指定连接池为NullPool,SQLAlchemy就会在执行session.close()后立刻断开数据库连接。当然,如果session对象被析构但是没有被调用session.close(),则数据库连接不会被断开,直到程序终止。
from sqlalchemy.pool import NullPool #连接数据库
def getEngine():
engine = create_engine('mysql://root:123456@127.0.0.1/baa?charset=utf8mb4', poolclass=NullPool, echo=False)
#print(engine)
return engine def getSession():
engine = getEngine()
BaseMode.metadata.create_all(engine)## 数据库生成表
# Session = sessionmaker(bind=engine)
# session = Session() DBSession = sessionmaker(bind=engine)
session = DBSession() return session
File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\connections.py", line 393, in check_error
err.raise_mysql_exception(self._data)
File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\err.py", line 107, in raise_mysql_exception
raise errorclass(errno, errval)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1040, 'Too many connections') (Background on this error at: http://sqlalche.me/e/e3q8) Process finished with exit code 1
1、pandas dataframe to_sql()
#连接数据库
def getEngine():
engine = create_engine('mysql://root:123456@127.0.0.1/databaseName?charset=utf8mb4',echo=False)
#print(engine)
return engine
def getSession():
engine = getEngine()
BaseMode.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
return session
def get_stock_daily(ts_code, start_date,end_date,startTime):
# print( ts_code + " " + str(start_date) + " " + str(end_date))
api = ts.pro_api(token) try:
df = ts.pro_bar(pro_api=api, ts_code=ts_code, start_date=start_date, end_date=end_date) # 【获取数据】
if df is None:
print("没有获取到数据")
return None print("data count: " + str(len(df)))
df['trade_date'] = pd.to_datetime(df['trade_date']) # 交易日期字符串转换成日期格式
conn = cheDbUtil.getEngine()
try:
df.to_sql('b_stock_daily', con=conn, if_exists='append', index=False) # replace/append/fail 【save】
except Exception as e:
traceback.print_exc()
print("get_stock_daily() in BaaBusiniessPro.py XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
return None
finally:
conn.dispose()
except Exception as e:
sleepNeed = 60
print("Start to sleep " + str(sleepNeed) + ' 秒')
print("当前耗时: " + str(round((time.time() - startTime), 2) / 60) + ' 分钟')
time.sleep(sleepNeed) # 休眠 ? 秒
2、SqlAlchemy 操作 mysql
#获取日行情最后一条记录的日期
def getMaxTradeDateForStockDaily(ts_code):
try:
session = getSession()
rows = session.query(func.max(StockDaily.trade_date)).filter(StockDaily.ts_code == ts_code).one()
# print(str(len(rows)))
# print(type(rows))
# print(str(rows))
if rows is not None and len(rows) == 1:
return rows[0]
return None
except Exception as e:
traceback.print_exc()
print("getMaxTradeDateForStockDaily() XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
return None
finally:
session.close()
SqlAlchemy “Too many connections”的更多相关文章
- sqlalchemy学习
sqlalchemy官网API参考 原文作为一个Pythoner,不会SQLAlchemy都不好意思跟同行打招呼! #作者:笑虎 #链接:https://zhuanlan.zhihu.com/p/23 ...
- Python操作Redis、Memcache、RabbitMQ、SQLAlchemy
Python操作 Redis.Memcache.RabbitMQ.SQLAlchemy redis介绍:redis是一个开源的,先进的KEY-VALUE存储,它通常被称为数据结构服务器,因为键可以包含 ...
- 3.SQLAlchemy文档-SQLAlchemy Core(中文版)
这里的文描述了关于SQLAlchemy的的SQL渲染引擎的相关内容,包括数据库API的集成,事务的集成和数据架构描述服务.与以领域为中心的ORM使用模式相反,SQL表达式语言提供了一个数据构架为中心的 ...
- SQLAlchemy on the way
SQLAlchemy Trial This is a great ORM ( Object-Relational Mapper ) which is compatible with xxxx and ...
- Python 之路:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
一.Memcached Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负债.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速 ...
- python 全栈开发,Day142(flask标准目录结构, flask使用SQLAlchemy,flask离线脚本,flask多app应用,flask-script,flask-migrate,pipreqs)
昨日内容回顾 1. 简述flask上下文管理 - threading.local - 偏函数 - 栈 2. 原生SQL和ORM有什么优缺点? 开发效率: ORM > 原生SQL 执行效率: 原生 ...
- 深入研究sqlalchemy连接池
简介: 相对于最新的MySQL5.6,MariaDB在性能.功能.管理.NoSQL扩展方面包含了更丰富的特性.比如微秒的支持.线程池.子查询优化.组提交.进度报告等. 本文就主要探索MariaDB当中 ...
- sqlalchemy 简介
#! /usr/bin/env python3 # -*- coding:utf-8 -*- #use SQLAlchemy #ORM:Object-Relational Mapping ,把关系数据 ...
- sqlalchemy学习-- 重要参数
Base = declarative_base 基类: 1.存储表 2.建立class-Table 的映射关系 engine = create_engine('mysql://root:root@lo ...
随机推荐
- BZOJ3110 [Zjoi2013]K大数查询 树套树 线段树 整体二分 树状数组
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3110 题意概括 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位 ...
- ibatis 多种传参方式
1,在公司项目yuda遇到的传入in语句,如果直接拼接in语句:in (....),sqlmap中使用#...#输出是不行的. 为需要使用: 第三种:in后面的数据确定,使用string传入 ...
- union和union all的区别(面试常考)
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: Union All:对两个结果集进行并集操作,包括重复行,不进行排序: Union因为要进行重复值扫描,所以效率低.如果合 ...
- P1087 FBI树 二叉树
题目描述 我们可以把由“00”和“11”组成的字符串分为三类:全“00”串称为BB串,全“11”串称为I串,既含“00”又含“11”的串则称为F串. FBIFBI树是一种二叉树,它的结点类型也包括FF ...
- 无向图的 DFS 和 BFS实现 (以邻接表存储的图)
#include <iostream> #include <queue> using namespace std; #define MaxVertexNum 10 typede ...
- 应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace(/[^\x00-\xff]/g,"aa").length;}
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace(/[^\x00-\xff] ...
- Validation failed for object='employee'. Error count: 1问题解决
2018-11-13 在表单提交时有时候会提示 Validation failed for object=’user’. Error count: 1,其中user是表的名字,Error count是 ...
- iOS9 中 alertView 的使用
"UIAlertView is deprecated. Use UIAlertController with a preferredStyle of UIAlertControllerSty ...
- Oracle内置存储过程之DBMS_OUTPUT
1.DBMS_OUTPUT 1.1 作用: 调试PL/SQL程序 1.2 相关函数: 命令 作用 备注 enable 在serveroutput on的情况下,用来使dbms_output生效(默认即 ...
- shell crlf to lf
UNIX/Linux Commands You can use the following tools: dos2unix (also known as fromdos) – converts tex ...