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。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM