Python3中Flask使用flask_sqlalchemy的的问题以及解决

本文介绍了Python3中使用Flask-SQLAlchemy时遇到的模块导入变化和SQLALCHEMY_TRACK_MODIFICATIONS配置问题。在Python3中,推荐使用`from flask_sqlalchemy import SQLAlchemy`而不是`from flask.ext.sqlalchemy import SQLAlchemy`,并且需要设置SQLALCHEMY_TRACK_MODIFICATIONS参数以避免未来潜在的不支持情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)

Python3在flask_sqlalchemy中相比改动了一些比如模块的导入。

在Python2中应该是 from flask.ext.sqlalchemy impot SQLAlchemy

虽然在Python3中这样使用其实不会错但是Python3中不赞成这样使用可能在未来会取消flask.ext.sqlalchemy这是个趋势

在Python3中建议使用from flask_sqlalchemy import SQLAlchemy


(二)

第一次使用这个模块需要对源码进行改变及设置:

设置SQLALCHEMY_TRACK_MODIFICATIONS 为True或False

/home/air/Desktop/microblog/flask/local/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py:839: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
提示我们需要设定参数‘True’ 或者 ‘’Flase‘
是说 SQLALCHEMY_TRACK_MODIFICATIONS 不能默认什么都没有, 
得设置其为 
### 在 Flask 中仅使用 Flask-SQLAlchemy 的连接池功能 尽管 Flask-SQLAlchemy 主要被设计用来作为 SQLAlchemy ORM 的封装工具,但它也提供了对原生 SQLAlchemy 引擎的支持。这意味着即使不想使用其 ORM 特性,仍然可以利用它内置的数据库连接池机制。 #### 实现步骤 1. **安装必要的包** 需要确保已安装 FlaskFlask-SQLAlchemy 。可以通过以下命令完成安装: ```bash pip install flask pip install flask_sqlalchemy ``` 2. **配置 SQLALCHEMY_ENGINE_OPTIONS** Flask-SQLAlchemy 支持通过 `SQLALCHEMY_ENGINE_OPTIONS` 来自定义 SQLAlchemy 引擎选项。这使得我们可以精确地调整连接池行为,而无需启用任何 ORM 功能。 3. **禁用模型声明** 为了防止自动加载 ORM 模型类,应避免调用 `db.Model` 或者其他与 ORM 相关的方法。 下面是具体实现代码: ```python from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # 数据库URI示例 (MySQL 使用 pymysql) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/dbname' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 自定义引擎选项以优化连接池表现 app.config['SQLALCHEMY_ENGINE_OPTIONS'] = { "pool_size": 10, # 设置连接池大小为 10 "max_overflow": 5, # 超过连接池大小后最多可额外创建的连接数量 "pool_pre_ping": True # 开启预 ping 连接检测,提高稳定性 } # 初始化 SQLAlchemy 对象 db = SQLAlchemy(app) # 测试连接池功能 @app.route('/test') def test_db(): with db.engine.connect() as connection: result = connection.execute("SELECT NOW()") current_time = result.fetchone()[0] return f'Current Time from DB: {current_time}' if __name__ == '__main__': app.run(debug=True) ``` 在这个例子中,`SQLALCHEMY_ENGINE_OPTIONS` 字典用于传递给 SQLAlchemy 的 `create_engine()` 方法[^5]。这些选项直接影响到连接池的行为模式,例如设定最大活跃连接数目(`pool_size`)、超出限制后的备用容量(`max_overflow`)以及是否开启预先心跳探测(`pool_pre_ping`)等功能。 值得注意的是,这里并没有涉及到任何关于 ORM 表结构定义的部分,而是单纯依靠 `db.engine.connect()` 接口执行原始 SQL 查询语句[^3]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值