首页 > 解决方案 > 连接池 sqlalchemy 总是返回一个缓存的结果

问题描述

我使用以下代码创建连接池并运行 SQL 查询。

engine = sqlalchemy.create_engine(
                f'mysql+pymysql://{usr}:{pw}@{db_config["host"]}:{db_config["port"]}/'
                f'{sub_db}', pool_size=24, max_overflow=40, poolclass=pool.QueuePool)
connection = engine.connect()
pandas.read_sql(sql=my_query, con=connection)

但是,我发现我创建的连接有时会返回缓存的数据库返回:

例如,我运行 SQL 函数validatePW来验证基于 DB 表的令牌。我有两个用户:AB使用不同的密码。用户A的密码是“PW1”。如果我跑步pandas.read_sql(sql="select validatePW('A', 'PW1')", con=connection),我True会得到预期的回报。如果我第一次运行pandas.read_sql(sql="select validatePW('B', 'PW1')", con=connection),我会得到一个False回报(B的密码不是'PW1')。

现在如果我顺序运行这两个查询,结果会变得很有趣

pd.read_sql(sql="select validatePW('A', 'PW1')", con=connection)
pd.read_sql(sql="select validatePW('B', 'PW1')", con=connection)

我会得到两个True回报,尽管我希望第二个查询会返回一个False. 似乎连接正在返回上次运行的缓存结果。这是为什么?有没有办法避免呢?谢谢

标签: python-3.xsqlalchemyconnection-pooling

解决方案


推荐阅读