小結flask SQLAlchemy操作

2022-05-26 18:18:08 字數 3006 閱讀 1074

具體配置見文件

方案是flask+sqlalchemy(flask_sqlalchemy外掛程式)+sqlite

參考這個專案的建表方式,我建立了兩張表

models.py**如下

from datetime import datetime

class epochinfo(db.model):

__tablename__ = "epochinfo" #表的名字

id = db.column(db.integer, primary_key=true)

var_epoch = db.column(db.integer, index=true)

epoch = db.column(db.integer, index=true)

posts = db.relationship('post', backref='result', lazy='dynamic') #backref在呼叫時可以使用虛擬欄位result來呼叫其作者,而不必通過使用者id來處理,如在使用的時候使用e=epochinfo.query.get(3) 3指id, p = post(body="bilibili", result=e) ;lazy決定sqlalchemy什麼時候從資料庫中載入資料(dynamic表示訪問屬性是,並沒有在記憶體中載入資料而是返回乙個query物件,需要執行相應方法,如.all()才可以獲取)

def __repr__(self):

return ''.format(self.var_epoch)

class post(db.model):

__tablename__ = "post" #表的名字

id = db.column(db.integer, primary_key=true)

body = db.column(db.text)

timestamp = db.column(db.datetime, index=true, default=datetime.utcnow) #timestamp有乙個預設值

epoch_id = db.column(db.integer, db.foreignkey('epochinfo.id'))

def __repr__(self):

return ''.format(self.body)

post

步驟上來講,其實類似git,首先寫好要加入資料庫的內容,然後add,然後commit提交更改

更改模型(models.py中的資訊,比如新增新錶),需要使用遷移flask db migrate然後flask db upgrade,回滾使用flask db downgrade

進入互動式環境,匯入例項和模型

新建epoch資訊

e = epochinfo(var_epoch=0, epoch=30)

db.session.add(e)

db.session.commit()

查詢epoch資訊

#查詢所有epoch資訊

epoches = epochinfo.query.all()

#檢視當前返回的資訊,可以看到存了多少項

epoches

#檢視epoches中具體每一項

for e in epoches:

print(e.id, e.var_epoch)

模型都有query屬性,最基本查詢就是返回所有的元素,適當命名為all()。新增使用者是,id欄位依次自動設定為1 2 3...

知道id,可以直接下面這種方式獲取使用者例項

e = epochinfo.query.get(1) #這裡的1是id
新增一條post

e = epochinfo.query.get(1)

p = post(body='my first post!', result=e) #這裡的result就是用的虛擬字段,因為e已經獲取了id資訊了,可以直接用e來引用id為1的記錄

db.session.add(p)

db.session.commit()

其他查詢案例

>>> # get all posts written by a user

>>> u = user.query.get(1)

>>> u

>>> posts = u.posts.all()

>>> posts

>>> # same, but with a user that has no posts

>>> u = user.query.get(2)

>>> u

>>> u.posts.all()

>>> # print post author and body for all posts

>>> posts = post.query.all()

>>> for p in posts:

... print(p.id, p.author.username, p.body)

...1 john my first post!

# get all users in reverse alphabetical order

>>> user.query.order_by(user.username.desc()).all()

[, ]

刪除記錄(可以在每次試驗結束後,刪除之前的所有記錄

>>> users = user.query.all()

>>> for u in users:

... db.session.delete(u)

...>>> posts = post.query.all()

>>> for p in posts:

... db.session.delete(p)

...>>> db.session.commit()

面試小結 學習小結

1 string 字串常量,每次改變都會生成乙個新的物件 stringbuffer 執行緒安全 變數 改變不會生成乙個新的物件 stringbuilder 非執行緒安全 在非多執行緒的情況下,用stringbuilder會快些 2 activity的四種啟動模式 singletop 棧頂正好是該ac...

python小結 python小結

c python33新增到你的path 環境變數中,你可以在dos 視窗中 輸入以下命令 set path path c python33 id 方法的返回值就是物件的記憶體位址。在 行 首行 後插入至少一行特殊的注釋行來定義原始檔的編碼。coding encoding sys.modules 模組...

自考小結 2019考試小結

目錄 小結 嘮叨 2019年下半年的自考也在今天結束了,我想了一下想不起上半年我考試了嗎?就回去翻看了一下自己的部落格,考了考了2門 作業系統 資訊資源管理 很幸運地都通過了,今天剛剛考完 c 程式設計 回頭看一下,好像自己太注重結果了,沒有什麼學過的記錄,想要總結一些卻不知道要總結些什麼。但給我最...