Python Flask,資料庫,SQLAlchemy,關聯查詢(多表查詢),一對多關聯
阿新 • • 發佈:2019-01-01
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查詢關聯的角色。