pymysql.err.OperationalError: (1040, 'Too many connections')
连接mysql数据库的次数太大了
这篇文章解释得很清楚:mysql的最大连接数问题:pymysql.err.OperationalError: (1040, 'Too many connections')
出现问题的原因:为了防止插入数据时,数据库连接挂掉,所有用了以下代码:
class FalvPipeline(object):
def __init__(self):
self.client = pymysql.connect(host=host, user=username, password=password, port=port, db=db, charset=charset)
self.cur = self.client.cursor()
def my_process(self, item):
# 先将item 入道文章表里面
fetch_sql = """
select id from question_answer_pairs_findlaw_new where answer ='%s' and question ='%s'
""" % (item.get('answer'), item.get('question'))
self.cur.execute(fetch_sql)
result = self.cur.fetchone()
if not result:
article_sql = """
insert into question_answer_pairs_findlaw_new (url, domain, question, answer, location, website)
values ('%s', '%s', '%s', '%s', '%s', '%s')
""" % (pymysql.escape_string(item.get('url')), pymysql.escape_string(item.get('domain')),
pymysql.escape_string(item.get('question')), pymysql.escape_string(item.get('answer')),
pymysql.escape_string(item.get('location')), pymysql.escape_string(item.get('website')))
self.cur.execute(article_sql)
self.client.commit()
def process_item(self, item, spider):
try:
self.my_process(item)
except:
self.client = pymysql.connect(host=host, user=username, password=password, port=port, db=db,
charset=charset)
self.cur = self.client.cursor()
self.my_process(item)
为了防止掉连接,使用try...excpet...里又重新连接了mysql数据库。结果多次数据没插入,最终导致以上错误:连接数据库次数超过限定次数了。
然后等了大半天,再次运行程序就没有出现那个错误了,估计是mysql程序自动检查连接是否还在使用,把长时间未使用的给自动关掉了。
解决这个问题。应该先检查原始的连接是否还可用,或是否掉了,然后再确定要不要重新连mysql数据库。
mysql MySqlConnection判断mysql是否连接成功and查看连接数和状态等
import mysql.connector
# password设为mysql的root口令
conn = mysql.connector.connect(user='root', password='password', database='test')
cursor = conn.cursor()
# 创建user表
cursor.execute('要执行的sql语句')
# 提交事务
conn.commit()
# 关闭Cursor和Connection:
cursor.close()
conn.close()
try:
# 执行sql语句
cursor.execute(sql)
# 执行sql语句
conn .commit()
except:
# 发生错误时回滚
conn .rollback()
网友评论