flask數據庫管理
阿新 • • 發佈:2018-04-30
類型 繼承 類定義 關系型數據庫 shell ESS not AD relation
1.SQL數據庫與NoSQL數據庫
SQL數據庫由不同的表組成,表和表之間由關系連接。每個表中存在一列主鍵,主表中的某列可用其他表的主鍵表示,這樣的關系構成關系型數據庫。
NoSQL數據庫即Not Only SQL,存在不同類型的NoSQL。
2.Flask - SQLAlchemy
(1)初始化
這裏我們還是使用SQLAlchemy數據庫。
(venv) $pip install flask-sqlalchemy
在Index.py中配置數據庫
from flask_sqlalchemy import SQLAlchemy basedir = os.path.abspath(os.path.dirname(__file__)) app = Flask(__name__) app.config[‘SQLALCHEMY_DATABASE_URI‘] = ‘sqlite:///‘ + os.path.join(basedir, ‘data.sqlite‘) app.config[‘SQLALCHEMY_COMMIT_ON_TEARDOWN‘] = True db = SQLAlchemy(app)
數據庫中的表用類定義,各個屬性即為表的列,各個實例即為表的行:
class User(db.Model) __tablename__ = ‘users‘ , id = db.Colomn(db.Integer , primary_key = True) username= db.Colomn(db.String(64) , unique = True , index = True) role_id = db.Colomn(db.Integer, db.ForeignKey(‘roles.id‘)) def __repr__: return ‘<User %r>‘ % self.username
其中繼承db.colomn的變量即為表中的列,示例中定義主鍵為id,id數據類型為數值型,username列的值不能重復且建立索引,role_id是外鍵且連接表名為roles的表的id列。
class Role(db.Model):__tablename__ = ‘roles‘ id = db.Colomn(db.Integer , primary_key = True) name = db.Colomn(db.String(64) , unique = True) users = db.relationship(‘User‘ , backref = ‘role‘) def __repr__: return ‘<Role %r>‘ % self.name
此處一個角色很可能有多個用戶與其對應,因此其實是一個一對多關系。relationship方法第一個參數設定與其連接的表對應的類,第二個參數backref將在User類中添加role屬性,此處role屬性可替代role_id的作用,註意此時獲取的不是外鍵的值,而是該實例整體。
在建立了表的基本結構之後,我們在shell中創建表:
(venv) $ python hello.py shell >>> from hello import db >>> db.creat_all()
(2)輸入數據
>>> from hello import Role,User
>>> admin_role = Role(name = ‘Admin‘)
>>> mod_role = Role(name = ‘Moderator‘)
>>> user_role = Role(name = ‘User‘)
>>> user_John = User(username = ‘John‘, role = admin_role)
>>> user_Susan = User(username = ‘Susan‘, role = user_role)
>>> user_David = User(username = ‘David‘), role = user_role)
但此時數據尚未寫入數據庫,只存在與Python中:
>>> print(admin_role.id) None
首先寫入數據庫會話
>>> db.session.add(admin_role) >>> db.session.add(mod_role) ... ...
或
>>> db.session.add_all([admin_role,mod_role,user_role,user_John,user_Susan,user_David])
提交會話(保存到數據庫):
>>> db.session.commit()
(3)編輯數據
修改數據即將數據重新提交一遍:
>>> admin_role.name = ‘Administrator‘ >>> db.session.add(admin_role) >>> db.session.commit()
刪除數據:
>>> db.session.delete(mod_rate)
>>> db.session.commit()
-
flask數據庫管理