flask 資料庫部分學習筆記

2021-10-03 15:13:42 字數 3974 閱讀 2097

sqlalchemy_track_modifications = false

sqlalchemy_echo = true # 會列印原生sql語句,便於觀察測試

class

article

(db.model)

: __tablename__ =

'article'

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

true

,autoincrement=

true

) title = db.column(db.string(

100)

,nullable=

false

) content = db.column(db.text,nullable=

false

)db.create_all(

)'/'

)def

index()

:#增加

article1 = article(title =

'aaa'

,content =

'bbb'

) db.session.add(article1)

#事務 db.session.commit()#查

result = article.query.

filter

(article.title==

'aaa'

).first(

)#返回query 類似list

print

('title:'

+result.title)

print

('content:'

+ result.content)

#改 ---- 查詢、修改、提交 三步走

article1 = article.query.

filter

(article.title ==

'aaa'

).first(

) article1.title =

'new title'

db.session.commit(

)#刪---查詢、刪除、提交 三步走

article1 = article.query.

filter

(article.content ==

'bbb'

).first(

) db.session.delete(article1)

db.session.commit(

)return render_template(

'index.html'

)

class

user

(db.model)

: __tablename__ =

'user'

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

'true'

,autoincrement=

'true'

) username = db.column(db.string(

100)

,nullable=

'false'

)class

article

(db.model)

: __tablename__ =

'article'

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

'true'

,autoincrement=

'true'

) title = db.column(db.string(

100)

,nullable=

'false'

) content = db.column(db.text,nullable=

'false'

) author_id = db.column(db.integer,db.foreignkey(

'user.id'))

db.create_all(

)

使用關係型資料庫,不指定關係怎麼能行。定義模型中我們沒有指定關係,乙個使用者有乙個角色,乙個角色可以屬於多個使用者,典型的一對多的關係,如何在flask-sqlalchemy中定義關係?

class

user

(db.model)

: __tablename__ =

'users'

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

true

) username = db.column(db.string(64)

,unique=

true

,index=

true

) role_id = db.column(db.integer,db.foreignkey(

'roles.id'))

def__repr__

(self)

:return

''% self.username

class

role

(db.model)

: __tablename__ =

'roles'

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

true

) name = db.column(db.string(64)

,unique=

true

) users = db.relationship(

'user'

,backref=

'role'

)def

__repr__

(self)

:return

''% self.name

新增了兩行**:

第一行,user類中:

role_id = db.column(db.integer,db.foreignkey(『roles.id』))

這句話比較好理解,和上面普通變數差不多,就是user類中新增了乙個role_id變數,資料型別db.integer,第二個引數指定外來鍵是哪個表中哪個id。

第二行,role類中:

users = db.relationship(『user』,backref=『role』)

這句話比較複雜,仔細讀下面的話:

0.新增到role模型中的users屬性代表這個關係的物件導向視角。對於乙個role類的例項,其users屬性將返回與角色相關聯的使用者組成的列表。

1.db.relationship()第乙個引數表明這個關係的另一端是哪個模型(類)。如果模型類尚未定義,可使用字串形式指定。

2.db.relationship()第二個引數backref,將向user類中新增乙個role屬性,從而定義反向關係。這一屬性可替代role_id訪問role模型,此時獲取的是模型物件,而不是外來鍵的值。

上面的關係為一對多關係的表示,一對一怎麼辦?

呼叫db.relationship()時需要把userlist引數設定為false。如下:

db.relationship(

'user'

,backref=

'role'

,uselist=

false

)

article1 = article.query.filter(article.title == 'aaa').first()

tags = article1.tags

for tag in tags:

print tag.name

資料庫(部分學習筆記)

1 概念 1.1 資料庫的作用 用來儲存資料,方便查詢 1.2 關係型資料庫 核心是用二維表儲存資料 行記錄,代表的是一條事物的資訊 列欄位,代表一條事物的某乙個屬性 表可以存很多行 資料庫可以存很多表 1.3 sql 結構化查詢語言,操作關係型資料庫 不區分大小寫 1.4 mysql 瑞典公司開發...

flask學習筆記 資料庫

大多數的資料庫引擎都有對應的 python 包,包括開源包和商業包。flask 並不限制你使用何種型別的資料庫包,因此可以根據自己的喜好選擇使用 mysql postgres sqlite redis mongodb 或者 couchdb。如果這些都無法滿足需求,還有一些資料庫抽象層 包供選擇,例如...

Flask學習筆記(3) 資料庫遷移

通過建立虛擬flask環境來遷移資料庫。mkvirtualenv flask tutorial python python3.6建立乙個名為flask tutorial的虛擬環境,如圖 可利用workon flask tutorial命令啟用這個虛擬環境。使用deactivate退出這個虛擬環境。在...