1. 程式人生 > >Python Flask,資料庫,SQLAlchemy,模型類的定義,資料庫新增

Python Flask,資料庫,SQLAlchemy,模型類的定義,資料庫新增

 

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()