1. 程式人生 > >【flask學習】05-不設外來鍵的關聯查詢

【flask學習】05-不設外來鍵的關聯查詢

學到了flask-SQLAlchemy, 一對多和多對多的模型,都需要建立外來鍵,來關聯表,但我們知道的,在資料庫操作中,如果有外來鍵完整性約束,會帶來很多不利的影響, 比如:外來鍵會導致表與表之間耦合,update與delete操作都會涉及相關聯的表,十分影響sql 的效能,甚至會造成死鎖。高併發情況下容易造成資料庫效能,大資料高併發業務場景資料庫使用以效能優先 所以,出於對flask-SQLAlchemy實用性的一些擔憂吧(小白一個,用詞不當,別介意~~),想著是否可以不新增外來鍵,進行關聯查詢。

from flask import Flask
from flask_sqlalchemy import
SQLAlchemy from sqlalchemy import and_ app = Flask(__name__) # 配置資料庫 app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:[email protected]:3306/flask_sql" app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) # 建立roles表 class Role(db.Model): """roles表""" __tablename__ =
'roles' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(40), unique=True) def __repr__(self): return 'Role: %d %s' % (self.id, self.name) # 建立users表 class User(db.Model): """users表""" __tablename__ = 'users' id = db.Column(db.Integer, primary_key=
True) name = db.Column(db.String(40)) def __repr__(self): return 'User: %d %s' % (self.id, self.name) @app.route('/') def index(): return 'index' if __name__ == '__main__': # 建立表 db.drop_all() db.create_all() # 新增資料 r1 = Role(name='role1') r2 = Role(name='role2') db.session.add_all([r1, r2]) db.session.commit() u1 = User(name='user1') u2 = User(name='user2') db.session.add_all([u1, u2]) db.session.commit() # 連表查詢 ret = db.session.query(Role, User).join(User, and_(Role.id == User.id, User.id == 2)) print(ret) # 輸出sql語句 print(ret.all()) # 輸出結果 app.run(debug=True)

執行結果:

SELECT roles.id AS roles_id, roles.name AS roles_name, users.id AS users_id, users.name AS users_name 
	FROM roles INNER JOIN users ON roles.id = users.id AND users.id = %s

根據sql語句,可以看到實現了 INNER JOIN