Flask SQLAlchemy 不設外鍵進行關聯查詢

關係型數據庫都有外鍵這個功能,但這個功能不是放在哪裏都是有利的,有不少時候反而會使事情變得複雜。我就不喜歡使用外鍵,這是性格問題;實際工做中的系統也從不用外鍵,這是視系統性質及環境而定的。
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)


運行這段代碼,就能夠在控制檯看到輸出的結果:
數據庫

wKiom1SeYe_SOzSQAAIkRG_j9CU020.jpg



能夠看到,SQLAlchemy生成的SQL語句就進行了一個關聯查詢,而且查詢獲得的結果分別放在了對應表的模型類裏面,只要分別訪問這個兩類就能夠訪問到關聯查詢獲得的每個字段的值。flask

相關文章
相關標籤/搜索