Sqlalchemy的学习使用和常见问题

推荐三个简单教程

下面是一些小知识点和常见问题

1. 获取自增的id

qa = QARecords(question='something')
db.session.add(qa)
db.session.commit()
print(qa.id)

 2. TypeError: filter_by() takes exactly 1 argument (2 given)

出现下面的错误,提示filter_by()需要一个参数,但是提供了两个,原因是我没有给参数指定参数名,所以可能这个函数判断不了这个参数应该复制给谁,所以报错

self.write_session.query(Users).filter_by(id).update(name='zhangsan')
给参数指定参数名后:
self.write_session.query(Users).filter_by(id=id).update(name='zhangsan')

3. 获取查询结果的长度

query = self.write_session.query(zephyr_task).filter_by(id > 10)
print(query.count())

 4. InternalError(1105)

出现这个错误而且没有其他提示信息,可能性最大的两种原因是:
(1) 字段长度超过限制
(2) 可以看看是不是字段要求格式和所传格式不一致
我出现这个错误的时候发现是我的有些字段是字符串,但是我赋值的时候赋值的是一个字典,赋值直接把字典进行json.dumps()转化成字符串后就没有这个错误了

5. update()的参数必须是一个字典,要不然会报错

6. 使用sqlalchemy查询指定的列字段

(1) 使用load_only函数
from sqlalchemy.orm import load_only
 
fields = ['name', 'addr', 'phone', 'url']
companies = session.query(SomeModel).options(load_only(*fields)).all()
(2) 使用 with_entities()
Flask-SQLAlchemy 的 query 是直接查询 model,查出来的一定是一个 model 对象。
如果要查询单个字段的话,应该用 session 去 query model。
a = db.session.query(Page.title, Page.page).all()
print(a)
b = Page.query.with_entities(Page.title, Page.page).all()
print(b)
这两个查询返回的都是一个列表,列表内的元素是一个元组,不过不是 Python 内置的元组,是 sqlalchemy.util._collections.KeyedTuple。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值