- 93
- 0
先上代码:
driver = db.session.query(Driver,Avatars).outerjoin(Avatars).filter_by(telephone=telephone).all()
LOG.info(driver) # INFO in views: [(Driver name: websocket, age: 25 telephone:156***4289, Driver's avatar is telephone:156****4289, avatar:/home/nvidia/Public/avicii-02.png, type:0)]
#LOG.debug(driver.__slots__) # 'list' object has no attribute '__slots__'
if(driver):
driverList = []
for dr in driver:
LOG.debug(dr.__slots__) #输出 [2019-07-03 14:32:43,402] DEBUG in views: ()
driverList.append(dr.__slots__)
return jsonify({"status":0,"msg":driverList})
说明
LOG.info(driver)控制台输出了查询结果,但是reture的driverList是[],postman显示内容如下:
{
"msg": [
[]
],
"status": 0
}
控制台日志如下:
2019-07-03 10:24:29,480 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2019-07-03 10:24:29,481 INFO sqlalchemy.engine.base.Engine SELECT driver.id AS driver_id, driver.name AS driver_name, driver.telephone AS driver_telephone, driver.age AS driver_age, avatars.id AS avatars_id, avatars.type AS avatars_type, avatars.telephone AS avatars_telephone, avatars.avatar AS avatars_avatar, avatars.`character` AS avatars_character
FROM driver LEFT OUTER JOIN avatars ON driver.telephone = avatars.telephone
WHERE avatars.telephone = %(telephone_1)s
2019-07-03 10:24:29,481 INFO sqlalchemy.engine.base.Engine {'telephone_1': '156****4289'}
#下面一条日志是LOG.info()显示的内容
[2019-07-03 10:24:29,485] INFO in views: [(Driver name: websocket, age: 25 telephone:156****4289, Driver's avatar is telephone:156****4289, avatar:/home/nvidia/Public/avicii-02.png, type:0)]
[2019-07-03 14:32:43,402] DEBUG in views: ()
2019-07-03 10:24:29,485 INFO sqlalchemy.engine.base.Engine ROLLBACK
127.0.0.1 - - [03/Jul/2019 10:24:29] "GET /driver/detail/156****4289 HTTP/1.1" 200 -
倒数第二条日志,返回数据给请求的时候,为什么回滚了呢?是我代码少写了什么吗?
- 共 0 条
- 全部回答
-
我願與孤獨長廂廝守っ 普通会员 1楼
在使用 Flask SQLAlchemy 进行数据库操作时,如果查询结果为空或获取不到数据,可能会导致应用在执行查询时无法正常工作,因为 SQLAlchemy 的查询不会自动回滚,因此需要手动对查询结果进行回滚操作。
以下是一个简单的示例,展示如何在 Flask 中在查询结果为空时进行回滚:
```python from flask import Flask, request, jsonify from flask_sqlalchemy import SQLAlchemy
app = Flask(name) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db' db = SQLAlchemy(app)
class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), nullable=False) email = db.Column(db.String(120), nullable=False)
def __repr__(self): return f'<User {self.name}>'@app.route('/user', methods=['GET']) def get_user(): if not User.query.all(): return jsonify({'error': 'User not found'}), 404
user = User.query.get(request.args.get('id')) if user is None: return jsonify({'error': 'User not found'}), 404 return jsonify({'user': user})if name == 'main': db.create_all() app.run(debug=True) ```
在这个示例中,我们首先创建了一个名为
User的模型,并在数据库中创建了一个名为example.db的 SQLite 数据库。然后,我们在/user页面定义了一个路由,该路由接受一个参数id,表示要获取的用户 ID。在路由函数中,我们首先检查用户模型中是否存在所有的用户。如果不存在,我们返回一个 JSON 序列,包含
error为'User not found'的信息,并返回 404 错误代码。如果存在所有用户,我们使用query.get(request.args.get('id'))从数据库中获取用户 ID,并返回一个 JSON 序列,包含用户信息。在查询结果为空时,由于 SQLAlchemy 会自动执行
User.query.get(request.args.get('id'))语句,并返回查询结果,因此在返回结果时,我们使用jsonify({'error': 'User not found'}), 404作为响应。这样,即使查询结果为空,我们也能在渲染结果时将查询结果的错误信息显示给用户,避免应用在执行查询时出现意外错误。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
