zoukankan      html  css  js  c++  java
  • 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。
     
  • 相关阅读:
    python imageai 对象检测、对象识别
    flask跨域请求三行代码搞定
    图片压缩-KMeans
    电影天堂
    python 时间操作
    时间HTML
    3D滚动效果
    tensorflow基础
    studio显示Surface: getSlotFromBufferLocked: unknown buffer: 0xa2a58be0
    解决github访问慢和clone慢解决方案
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/13517442.html
Copyright © 2011-2022 走看看