1. 程式人生 > >Python Flask,資料庫,SQLAlchemy,關聯查詢(多表查詢),一對多關聯

Python Flask,資料庫,SQLAlchemy,關聯查詢(多表查詢),一對多關聯

 

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


demo2.py(關聯查詢):

from demo import Role, User  # 匯入模型類

role1 = Role.query.get(1)
user_list = role1.users   # 通過關聯屬性users獲取關聯的使用者。


user1 = User.query.get(1)
role2 = user1.role   # 通過關聯屬性role獲取關聯的角色。


user1 = User.query.get(1)
role3 = Role.query.get(user1.role_id)  # 通過外來鍵role_id查詢關聯的角色。