Flask 应用程序中 SQL Alchemy 的 MySQL 连接池问题

问题描述 投票:0回答:0

在Flask应用中使用SQL Alchemy时,如果应用不断向数据库发送查询,超过了连接池的最大连接数。我该如何解决这个问题?

sqlalchemy_engine.py

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import QueuePool


class OrmEngine:
    def __init__(self):
        self.engine = create_engine(os.getenv('DATABASE_URL'),
                                    poolclass=QueuePool,
                                    pool_size=5,
                                    max_overflow=3
                                    )
        self.session = sessionmaker(bind=self.engine)

示例查询

with self.orm_engine.session() as session:
    user_repository = UserRepository(session)
    user = user_repository.find_by_email(login_request.email)

我的联系人列表

+-----+-------------+-----------------+------+---------+------+--------------------------+------------------+----------+
| Id  | User        | Host            | db   | Command | Time | State                    | Info             | Progress |
+-----+-------------+-----------------+------+---------+------+--------------------------+------------------+----------+
|   2 | system user |                 | NULL | Daemon  | NULL | InnoDB purge worker      | NULL             |    0.000 |
|   1 | system user |                 | NULL | Daemon  | NULL | InnoDB purge coordinator | NULL             |    0.000 |
|   3 | system user |                 | NULL | Daemon  | NULL | InnoDB purge worker      | NULL             |    0.000 |
|   4 | system user |                 | NULL | Daemon  | NULL | InnoDB purge worker      | NULL             |    0.000 |
|   5 | system user |                 | NULL | Daemon  | NULL | InnoDB shutdown handler  | NULL             |    0.000 |
|   8 | root        | localhost:56603 | NULL | Query   |    0 | Init                     | SHOW PROCESSLIST |    0.000 |
| 645 | root        | localhost:64281 | tbot | Sleep   |   74 |                          | NULL             |    0.000 |
| 662 | root        | localhost:64334 | tbot | Sleep   |   56 |                          | NULL             |    0.000 |
| 684 | root        | localhost:64400 | tbot | Sleep   |   33 |                          | NULL             |    0.000 |
| 705 | root        | localhost:64476 | tbot | Sleep   |   16 |                          | NULL             |    0.000 |
| 707 | root        | localhost:64482 | tbot | Sleep   |   14 |                          | NULL             |    0.000 |
| 709 | root        | localhost:64488 | tbot | Sleep   |   13 |                          | NULL             |    0.000 |
| 711 | root        | localhost:64494 | tbot | Sleep   |   12 |                          | NULL             |    0.000 |
| 713 | root        | localhost:64500 | tbot | Sleep   |   10 |                          | NULL             |    0.000 |
| 715 | root        | localhost:64506 | tbot | Sleep   |    9 |                          | NULL             |    0.000 |
| 717 | root        | localhost:64512 | tbot | Sleep   |    8 |                          | NULL             |    0.000 |
| 719 | root        | localhost:64518 | tbot | Sleep   |    7 |                          | NULL             |    0.000 |
| 720 | root        | localhost:64521 | tbot | Sleep   |    4 |                          | NULL             |    0.000 |
| 722 | root        | localhost:64527 | tbot | Sleep   |    3 |                          | NULL             |    0.000 |
| 724 | root        | localhost:64533 | tbot | Sleep   |    2 |                          | NULL             |    0.000 |
| 726 | root        | localhost:64539 | tbot | Sleep   |    1 |                          | NULL             |    0.000 |
+-----+-------------+-----------------+------+---------+------+--------------------------+------------------+----------+
21 rows in set (0.000 sec)```

I tried increasing the 'pool_size' and 'max_overflow' values.
python mysql flask sqlalchemy flask-sqlalchemy
© www.soinside.com 2019 - 2024. All rights reserved.