关系型数据库都有外键这个功能,但这个功能不是放在哪里都是有利的,有不少时候反而会使事情变得复杂。我就不喜欢使用外键,这是性格问题;实际工做中的系统也从不用外键,这是视系统性质及环境而定的。
python
在学习Flask的过程当中,发现使用SQLAlchemy关联查询多表时,网上给出的教程、文档之类的都是基于外键(使用releationship和ForeginKey)的,不是很想用这些方法。mysql
通过一轮摸索,仍是找到了不须要外键,使用SQLAlchemy关联查询任意多个表的方法,代码以下:sql
#coding=utf-8 from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123@localhost:3306/tt' db = SQLAlchemy(app) #建表模型 class Test(db.Model): id = db.Column(db.Integer, primary_key = True) name = db.Column(db.String(32)) class TestItems(db.Model): id = db.Column(db.Integer, primary_key = True) test_id = db.Column(db.Integer) #应用,在浏览器访问http://localhost/test/ @app.route('/test/') def test(): query = db.session().query(models.TestItems, models.Test) query = query.join(models.Test, models.Test.id == models.TestItems.test_id) #query = query.filter('test.id = 1') #query = query.order_by('test.id') print query data = query.all() print dir(data[0]) print data[0].Test.name #for row in data: # print row.Test.name return 'OK' if __name__ == '__main__': db.create_all() app.run(port = 80, debug = True)
运行这段代码,就能够在控制台看到输出的结果:
数据库
能够看到,SQLAlchemy生成的SQL语句就进行了一个关联查询,而且查询获得的结果分别放在了对应表的模型类里面,只要分别访问这个两类就能够访问到关联查询获得的每个字段的值。flask