第五章 資料庫

2022-08-30 09:42:08 字數 2310 閱讀 4662

資料庫按照一定的規則儲存程式資料,程式再發起查詢取回所需的資料。web程式最常用基於關係模型的

資料庫,這種資料庫也稱為sql資料庫。因為它們使用結構化查詢語言。近幾年流行文件資料庫

和 __鍵值對資料庫__成了最流行戴爾替代選擇,這兩種資料庫合稱nosql資料庫。

nosql資料庫一般使用集合代替表,使用文件代替記錄。

nosql資料庫採用的設計方式使聯結變得困難,所以大多數資料庫不支援這種操作。

nosql好處: 資料重複可以提公升查詢速度。

sql資料庫擅於用高校且緊湊的形式儲存結構化資料,需要花費大量精力保證資料的一致性

nosql放寬了對一致性的要求,獲得了效能上的優勢。

flask-sqlalchemy是乙個flask擴充套件,簡化了flask程式中使用sqlalchemy的操作。

模型表示程式使用的持久化實體,在orm中,模型一般是乙個python類,類中的屬性對應資料庫表中的列

repr()方法,返回乙個具有可讀性的字串表示模型,可在除錯和測試時使用。

class role(db.model):

# ...

users = db.relationship('user', backref='role')

class user(db.model):

# ...

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

新增到user模型中的role_id列被定義為外來鍵。

傳給db.foreignkey()的引數'role.id'表明這列是roles表中行的id值。

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

建立資料庫,使用db.create_all(),更新現有資料庫表的粗暴方式是先刪除再重新出建立。

db.drop_all()

db.create_all()

構造物件,準備把物件寫入資料庫之前,先要將其新增到會話中,然後呼叫commit()提交會話,

資料庫會話也稱為事務

資料庫會話能保證資料庫的一致性。提交操作把會話中的物件全部寫入資料庫。

會話也可以回滾。db.session.rollback()

刪除與插入和更新一樣,提交資料庫會話後才會執行。

flask-sqlalchemy為每個模型類都提供了query物件。

使用過濾器可以配置query物件進行更精準的資料庫查詢。

filter_by()等過濾器在query物件上呼叫。返回乙個更精確的query物件。

all()以列表形式返回查詢的所有結果。

想把物件新增到匯入列表中,我們要為shell命令註冊乙個make_context**函式。

make_shell_context()函式註冊了程式、資料庫例項以及模型,因此這些物件能直接匯入shell。

更新表的更好方法是使用資料庫遷移框架,原始碼版本控制工具可以跟蹤原始碼檔案的變化。

sqlalchemy主力開發人員編寫了乙個遷移框架,稱為alembic,flask程式還可使用flask-migrate擴充套件。

這個擴充套件對alembic做了輕量級包裝,並整合到flask-script中,所有操作都通過flask-script命令完成。

資料庫遷移倉庫中的檔案要和程式的其他檔案一起納入版本控制。

alembic中,資料庫遷移用遷移指令碼表示,指令碼中有兩個函式,分別是upgrade()和downgrade()。

upgrade()把遷移中的改動應用到資料庫中,downgrade()則將改動刪除

先建立遷移倉庫,然後建立遷移指令碼,之後使用upgrade()進行更新。

python manage.py init

python manage.py db migrate -m "initial"

python manage.py db upgrade

init的作用是初始化遷移,建立migration資料夾

migrate的作用是根據model.py中的變化更新遷移,該指令會在migration/versions/資料夾中新增乙個版本檔案,檔名為版本號。開啟能夠看到對應model.py檔案,修改前後新遷移版本發生的變化。

update會將遷移中最新版本的結構應用到資料庫中(例如新增新增的列),並更新自動建立的version 表中的版本號。該版本號與migration/versions/資料夾中對應。任何情況下,這兩個版本號不對應都會導致出錯。

資料庫第五章

資料庫的完整性 資料的正確性 是指資料是符合現實世界語義,反映了當前實際狀況的 資料的相容性 是指資料庫同一物件在不同關係表中的資料是符合邏輯的 例如,學生的學號必須唯一 性別只能是男或女 本科學生年齡的取值範圍為14 50的整數 學生所選的課程必須是學校開設的課程,學生所在的院系必須是學校已成立的...

資料庫第五章習題

學號 2013211492 第二題 1 學生 學號,姓名,出生日期,系名,班號,宿舍區 班級 班號,專業名,系名,系辦公室地點,人數 系 系名,系號,系辦公室地點,人數 學會 學會名,成立年份,地點,人數,入會年份 2 學生關係的最小函式依賴集 f 存在傳遞依賴 學號 系名,系名 宿舍區 班級關係的...

優化資料庫第五章

t sql使用下列語句來管理事務 1.begin transaction 2.commit transaction 3.rollback transaction 使用全域性變數 error判斷事務操作是否成功。1.error儲存最近一條sql語句的執行結果。2.如果sql語句執行成功,則 error...