Python Flask,資料庫,SQLAlchemy,模型類的定義,資料庫新增
阿新 • • 發佈:2019-01-01
SQLAlchemy是一個ORM框架。flask-sqlalchemy是一個簡化了SQLAlchemy操作的flask擴充套件。
安裝flask-sqlalchemy: pip install flask-sqlalchemy
安裝Mysql驅動: pip install MySQL-python # Python2中安裝MySQL-python,Python3中安裝 PyMySQL
demo.py(模型類的定義,資料庫的新增):
# coding:utf-8
from flask import Flask
from flask_sqlalchemy import SQLAlchemy # 匯入
app = Flask(__name__)
# 通過類物件載入配置。 (配置資料庫)
class Config(object):
"""配置引數"""
# sqlalchemy的配置引數
SQLALCHEMY_DATABASE_URI = "mysql://root:密碼@127.0.0.1:3306/資料庫名"
# 設定sqlalchemy自動跟蹤資料庫中資料的修改 (修改資料庫資料後,對應的模型類物件會自動修改)(新增物件時,自動返回id給物件)
SQLALCHEMY_TRACK_MODIFICATIONS = True
app.config.from_object(Config) # 通過類物件載入配置引數
# 建立資料庫sqlalchemy工具物件
db = SQLAlchemy(app)
# 模型類 (繼承db.Model)
class Role(db.Model):
"""使用者角色表"""
__tablename__ = "tbl_roles"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32), unique=True)
users = db.relationship("User", backref="role") # 關聯屬性。關聯的所有使用者 (一對多)
# backref="role" 表示會在User模型類中自動建立關聯屬性role。
def __repr__(self):
"""定義之後,可以讓顯示物件的時候更直觀"""
return "Role object: name=%s" % self.name
# 表名的常見規範
# ihome -> ih_user 資料庫名縮寫_表名
# tbl_user tbl_表名
# 資料庫模型類
class User(db.Model):
"""使用者表"""
__tablename__ = "tbl_users" # 指明對應的資料庫表名
id = db.Column(db.Integer, primary_key=True) # 整型的主鍵,會預設設定為自增主鍵
name = db.Column(db.String(64), unique=True)
email = db.Column(db.String(128), unique=True)
password = db.Column(db.String(128))
role_id = db.Column(db.Integer, db.ForeignKey("tbl_roles.id")) # 外來鍵 (一對多)
def __repr__(self):
return "User object: name=%s" % self.name
if __name__ == '__main__':
# 清除資料庫裡的所有表 (不推薦使用)
db.drop_all()
# 建立所有的表 (根據模型類建立)
db.create_all()
# 建立物件
role1 = Role(name="admin")
# 通過會話將物件新增到資料庫中 (session是與資料庫的連結會話)
db.session.add(role1)
# 提交任務到資料庫中
db.session.commit() # SQLALCHEMY_TRACK_MODIFICATIONS設定為True後,會自動將id傳給物件role1
# db.session.rollback() # 回滾
role2 = Role(name="stuff")
db.session.add(role2)
db.session.commit()
us1 = User(name='wang', email=' [email protected]', password='123456', role_id=role1.id)
us2 = User(name='zhang', email='[email protected]', password='201512', role_id=role2.id)
us3 = User(name='chen', email='[email protected]', password='987654', role_id=role2.id)
us4 = User(name='zhou', email='[email protected] ', password='456789', role_id=role1.id)
# 一次新增多條資料
db.session.add_all([us1, us2, us3, us4])
db.session.commit()