美文网首页
python pymysql.err.OperationalEr

python pymysql.err.OperationalEr

作者: 布口袋_天晴了 | 来源:发表于2019-11-20 21:23 被阅读0次

    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()
    

    相关文章

      网友评论

          本文标题:python pymysql.err.OperationalEr

          本文链接:https://www.haomeiwen.com/subject/hryaictx.html