「Python」 flask使用SQLAlchemy时报错: sqlalchemy.exc.InvalidRequestError: Object '
2019-01-19 10:09
106 查看
报错:
sqlalchemy.exc.InvalidRequestError: Object '<Model at 0x7fe27328e898>' is already attached to session '2' (this is '3')
问题:
session交叉混用分析:
1、我的项目中项目采用了维护单一db的方式; 2、既然是
session混用说明又创建了一个
db,执行了
db.session; 3、我的项目中只在
app.py中维护了一个
db,视图函数中
from app import db,所以可以推测是在当前发生
session混用的视图函数中产生了新
db,并执行了
db.session; 4、而哪里执行了
SQLAlchemy(),哪里就产生了新
db5、但是发生混用的视图函数并没有找到
SQLAlchemy(), 6、视图函数
1 req = request.args 2 id = int(req.get('id',0)) 3 model = Model.query.filter_by(id=id).first() 4 model.name = name 5 model.updated_time = now() 6 db.session.add(model) 7 db.session.commit()7、读到line7 Model采用了
sqlacodegen生成模型文件
使用命令生成ORM模型
flask-sqlacodegen 'mysql://root:123456@127.0.0.1/haha' --tables model --outfile "common/models/model.py" --flask
生成模型文件model.py如下:
1 # coding: utf-8 2 from sqlalchemy import Column, DateTime, Integer, String 3 from sqlalchemy.schema import FetchedValue 4 from flask_sqlalchemy import SQLAlchemy 5 from app import app 6 7 db = SQLAlchemy() 8 9 class Model(db.Model): 10 __tablename__ = 'model' 11 12 id = db.Column(db.Integer, primary_key=True, unique=True) 13 name = db.Column(db.String(50), nullable=False, server_default=db.FetchedValue())8、问题基本明了,是生成的类文件中自带了一句
db = SQLAlchemy()
解决办法:
1、
6 db.session.add(model) 7 db.session.commit() ```更换为``` 6 db.session.query(Model).filter_by(id=id).update({'name': model.name})
2、
1 req = request.args 2 id = int(req.get('id',0)) 3 '''追加一句''' 4 from model.Model import db 5 model = Model.query.filter_by(id=id).first() 6 model.name = name 7 model.updated_time = now() 8 db.session.add(model) 9 db.session.commit()以上俩种办法是可以修改数据正常运行,但是并不符合我项目需求,根本问题没有解决。
1可以解决维护一个
db的问题,但是操作起来不方便。
2操作简单但是不符合单一
db的要求。
3、
修改orm模型如下:
5 from app import app 6 7 db = SQLAlchemy()
1 # coding: utf-8 2 from sqlalchemy import Column, DateTime, Integer, String 3 from sqlalchemy.schema import FetchedValue 4 from flask_sqlalchemy import SQLAlchemy 5 from app import db,app 6 7 class Model(db.Model): 8 __tablename__ = 'model' 9 10 id = db.Column(db.Integer, primary_key=True, unique=True) 11 name = db.Column(db.String(50), nullable=False, server_default=db.FetchedValue())
相关文章推荐
- Python――flask-sqlalchemy 自动生成符合Sqlachemy的Model:sqlautocode/sqlacodegen使用方式
- Python Flasky学习_使用Flask_SQLAlchemy的asPagination类对象实现分页
- 在Python程序和Flask框架中使用SQLAlchemy的教程
- Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
- Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
- [python][flask][flask-SQLAlchemy]关于flask-SQLAlchemy的初级使用教程
- Python的Flask框架中SQLAlchemy使用时的乱码问题解决
- flask框架:Python 3.5下使用 flask_SqlAlchemy和mysql
- python使用 flask_sqlalchemy连接mysql时出现ImportError: No module named MySQLdb错误
- 深入研究Python-Flask源码:flask_sqlalchemy中SQLAlchemy(object)类
- Python使用Flask-SQLAlchemy连接数据库操作示例
- Python Flask Web 第十一课 —— 使用 Flask-SQLAlchemy 管理数据库
- Python程序和Flask框架中使用SQLAlchemy的教程
- Python的Flask框架中SQLAlchemy使用时的乱码问题解决
- flask中使用SQLAlchemy进行辅助开发的代码
- 使用wfastcgi在IIS上部署Python Flask应用
- Python使用Flask框架获取当前查询参数的方法
- 发一个经典的Flask-SQLAlchemy使用场景
- 20.Python笔记之SqlAlchemy使用
- Ubuntu下使用Python+flask+MySQL的架构搭建Web框架