具體配置見文件
方案是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 程式設計 回頭看一下,好像自己太注重結果了,沒有什麼學過的記錄,想要總結一些卻不知道要總結些什麼。但給我最...